zoukankan      html  css  js  c++  java
  • AC日记——Maximal GCD codeforces 803c

    803C - Maximal GCD

    思路:

      最大的公约数是n的因数;

      然后看范围k<=10^10;

      单是答案都会超时;

      但是,仔细读题会发现,n必须不小于k*(k+1)/2;

      所以,当k不小于10^5时直接-1就好;

      我们可以构造出gcd为1的序列为

        1,2,3,4……n-k+1;

      然后一个个枚举n的因子p;

        1*p,2*p,3*p……(n-k+1)*p;

      当枚举的p使得序列不满足于严格递增时,结束,输出合法答案;

    来,上代码:

    #include <cmath>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define ll long long
    
    long long n,k;
    
    int main()
    {
        cin>>n>>k;
        if(k==1)
        {
            cout<<n;
            return 0;
        }
        if(n<k||k>200000||k==0)
        {
            cout<<-1;
            return 0;
        }
        long long c=k*(k+1)/2;
        if(n<c)
        {
            cout<<-1;
            return 0;
        }
        ll p=n/c,last=1;
        for(ll i=2;i<=sqrt(n)+1;i++)
        {
            if(n%i) continue;
            ll ok=1,sum=n;
            for(ll j=1;j<k;j++)
            {
                sum-=j*i;
                if(sum<=j*i) ok=false;
            }
            if(sum<=i*(k-1)) ok=false;
            if(ok) last=i;
            else break;
        }
        for(ll i=sqrt(n)+1;i>=1;i--)
        {
            if(n%i) continue;
            ll a=n/i;
            ll ok=1,sum=n;
            for(ll j=1;j<k;j++)
            {
                sum-=j*a;
                if(sum<=j*a) ok=false;
            }
            if(sum<=a*(k-1)) ok=false;
            if(ok) last=a;
            else break;
        }
        ll sum=n;
        for(ll i=1;i<k;i++) printf("%lld ",i*last),sum-=i*last;
        printf("%lld",sum);
        return 0;
    }
  • 相关阅读:
    模拟Linux修改实际、有效和保存设置标识
    ubuntu中桌面图标的配置
    硬盘安装ubuntu
    关于NumPy
    关于Spring JavaWeb工程中的ContextRefreshedEvent事件
    MySQL中Index Merge简介
    InetlliJ IDEA的快捷键及各种配置
    Java语言中的正则表达式
    Git使用笔记
    linux中添加常用应用程序的桌面图标
  • 原文地址:https://www.cnblogs.com/IUUUUUUUskyyy/p/6830865.html
Copyright © 2011-2022 走看看