Maximal GCD CodeForces - 803C

 emmm 求一个数n大于k的最小约数这样的问题,如果不暴力的话其实可以用欧拉筛法的思想遍历n的素因子,每个素因子求一个约数这样去弄,会比直接暴力省时间。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
const double PI = acos(-1.0);
const double eps = 1e-6;
const int INF = 1000000000;
const int maxn = 100;
int main(){
    ll n,k;
    scanf ("%lld%lld",&n,&k);
    if (k > 141420) printf("-1\n");
    else {
        long long sum=k*(k+1)/2;
        ll i;
        ll tmp=0;
        ll q = sqrt (n);
        for (i=1;i<=q;i++){
            if (n%i==0){
                if (i>=sum) {tmp = n/i;break;}
                else if (n/i >= sum) tmp = i;
            }
        }
        if (!tmp) {printf("-1\n");return 0;}
        ll res = n/tmp;
        sum = 0;
        for (i=1;iprintf("%lld ",tmp*i);
            sum += i;
        }
        printf("%lld\n",tmp*(res-sum));
    }
    return 0;
}

你可能感兴趣的:(gcd构造)