Codeforces 803C Maximal GCD 题解
2017-04-30 12:02
363 查看
题意
找到和为n的k个严格递增的正整数,使得它们的GCD最大,如果没有,输出-1思路
首先,考虑n和k的范围,发现k>200000时必然无解(当然这个范围还可以扩大),因为就算是从1开始的公差为1的序列和都会超过n的最大范围。其次,这个最大GCD肯定是n的一个约数,所以我们可以先求出n的所有约数,然后从大到小检验,检验的方法是先对n除以这个约数,然后看它和1+2+3+...+k的大小关系,如果它不小于这个和就可以了,就让前k-1个数是1至k-1倍的这个约数,用最后那个数凑出和为n就可以了代码
#include <cstdio> #include <vector> #include <cmath> #include <algorithm> using namespace std; vector<long long> divv; int main() { long long n,k,e,f; scanf("%I64d%I64d",&n,&k); if(k>200000) printf("-1\n"); else { e=sqrt(n); for(long long i=1;i<=e;i++) if(n%i==0) { divv.push_back(i); if(i*i!=n) divv.push_back(n/i); } sort(divv.begin(),divv.end()); f=0; for(long long i=divv.size()-1;i>=0;i--) if(n/divv[i]>=k*(k+1)/2) { f=divv[i]; break; } if(f==0) printf("-1\n"); else { for(long long i=0;i<k-1;i++) { printf("%I64d ",f*(i+1)); n-=f*(i+1); } printf("%I64d\n",n); } } return 0; }
相关文章推荐
- Codeforces 803C Maximal GCD【思维】
- CodeForces - 803C Maximal GCD(贪心)
- Codeforces 803C Maximal GCD
- Codeforces 338D GCD Table 题解&代码
- CodeForces - 803C Maximal GCD
- codeforces 803C Maximal GCD(GCD数学)
- Codeforces 475D CGCDSSQ 求序列中连续数字的GCD=K的对数
- CodeForces 160D Edges in MST 题解
- Codeforces #39C: Moon Craters 题解
- codeforces 664B题 Rebus 题解记录了我做这道题从错到对的完整思路
- 【codeforces】Codeforces Round #283 (Div. 2) 【题解】
- 【题解】codeforces741D Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths
- 【BZOJ】【P2818】【Gcd】【数论】【题解】
- CodeForces 623 B.Array GCD(数论+dp)
- 小白题解 Codeforces 807B T-Shirt Hunt
- 【codeforces 384E】Propagating tree 中文题意&题解&代码(c++)
- Codeforces 802J Send the Fool Further! (easy) 题解
- Codeforces 632F Magic Matrix 题解
- CodeForces 645F Cowslip Collections(gcd+欧拉函数)
- 【CodeForces】Round #270 A,B,C,D题解