CodeForces

来源:互联网 发布:强子纹身器材淘宝 编辑:程序博客网 时间:2024/06/05 19:00

最大gcd也是n的因数,构造q*(a1+a2+..ak)=n,q<=(a1+a2+..ak),枚举q找到最大gcd

#include<cstdio>#include<cstring>#include<cmath>unsigned long long minmul,n,k,q,sqr;int main(){scanf("%lld%lld",&n,&k);minmul=(1+k)*k/2;if(minmul>n || k>1e6){printf("-1");return 0;}sqr=sqrt(n);for(unsigned long long i=1;i<=sqr;i++)if(n%i==0)//枚举找出最大因数 {if(i>=minmul)//如果这个最大gcd本身已经比最小和大了 {             //此时判断n/i行不行,i>minmul,说明minmul*n/i<n
    //则n/i就是最大公约数q=n/i;break;}elseif(i*minmul<=n)//必须满足最小和*最大gcd小于等于n q=i;  //因为要使真正和*最大gcd等于n }for(int i=1;i<=k-1;i++)printf("%lld ",i*q);printf("%lld",n-k*(k-1)/2*q);return 0;}


原创粉丝点击