zoukankan      html  css  js  c++  java
  • codeforces 803C Maximal GCD(GCD数学)

    Maximal GCD

    题目链接:http://codeforces.com/contest/803/problem/C

        ——每天在线,欢迎留言谈论。

    题目大意:

    给你n,k(1<=n,k<=1e10)。

    要你输出k个数,满足以下条件:

    ①这k个数之和等于n

    ②严格递增

    ②输出的 这k个数 的最大公约数q是同样满足①②条件中的最大的!

    思路:

    一、先找出这个符合条件的最大的q:

    ①q一定是n的 公约数

    ②q*(1+2+···+k)<=n 时的q就可以成为共约数(因为输出时 只需要把k增大到m,m满足 1+2+··+(k-1)+m=n/q 就可以)

    ③在n的公约数中从大到小遍历是否符合条件即可。

    ↓ ↓ ↓ ↓ 不超时的一种 遍历公约数 的思想!

    只需要通过for(long long i=1;i<sqrt(n);i++)来找出最大的那个q

    假如2是他的一个约数,那么n/2也是。3是的话n/3也是。所以循环到sqrt(n)即可。最多1e5次循环 不会超T。

    二、输出这k个数

    q*a1,q*a2,q*a3 ······ q*ak(没有,号,只是好看)

    其中的{a1,a2,a3···ak}={1,2,3 ··· (k-2) , (k-1) , ((n/q)- sum)}(sum=1+2+···+(k-1))

    PS注意:k好大时 long long 也装不下(1+2+···+k)!(不说太清楚,自己体会,哈哈...)

    AC代码:

     1 #include <iostream>
     2 #include <cmath>
     3 using namespace std;
     4 int main()
     5 {//1<=n,k<=1e10
     6     long long n,k,sqr,cadd,q;//q为最大公约数
     7     cin>>n>>k;
     8     if(k>141420)
     9     {
    10         cout<<"-1"<<endl;return 0;
    11     }
    12     cadd=(1+k)*k/2;sqr=sqrt(n);q=0;
    13     for(long long i=1;i<=sqr;i++)
    14     {
    15         if(n%i==0)
    16         {
    17             if(i>=cadd)
    18                 {q=n/i;break;}
    19             else if(n/i>=cadd)
    20                     q=i;
    21         }
    22     }
    23     //cout<<q<<endl;
    24     if(!q)
    25     {
    26         cout<<"-1"<<endl;return 0;
    27     }
    28     long long sum=0,i;
    29     for(i=1;i<k;i++)
    30     {
    31         cout<<i*q<<" ";sum+=i;
    32     }
    33     cout<<q*(n/q-sum)<<endl;
    34     return 0;
    35 }

     2017-05-04 14:06:58 -> 2017-05-05 12:51:05 -> 2017-05-05 20:45:26

  • 相关阅读:
    跨浏览器OCX
    安装QT5.02
    Ubuntu登陆密码忘记
    QTableView
    VMware安装时Error 1324. The path My Documents contains a invalid character的原因和解决方法
    VS2005 与虚拟机的那点事
    创建掩码位图来实现透明绘图
    【转载】spring注解整理
    记录spring test类无法插入数据问题
    Uniapp 原生开发uniapp.arr 新老兼容问题
  • 原文地址:https://www.cnblogs.com/Twobox/p/6806829.html
Copyright © 2011-2022 走看看