AC日记——Maximal GCD codeforces 803c
2024-10-21 04:15:40
思路:
最大的公约数是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==)
{
cout<<n;
return ;
}
if(n<k||k>||k==)
{
cout<<-;
return ;
}
long long c=k*(k+)/;
if(n<c)
{
cout<<-;
return ;
}
ll p=n/c,last=;
for(ll i=;i<=sqrt(n)+;i++)
{
if(n%i) continue;
ll ok=,sum=n;
for(ll j=;j<k;j++)
{
sum-=j*i;
if(sum<=j*i) ok=false;
}
if(sum<=i*(k-)) ok=false;
if(ok) last=i;
else break;
}
for(ll i=sqrt(n)+;i>=;i--)
{
if(n%i) continue;
ll a=n/i;
ll ok=,sum=n;
for(ll j=;j<k;j++)
{
sum-=j*a;
if(sum<=j*a) ok=false;
}
if(sum<=a*(k-)) ok=false;
if(ok) last=a;
else break;
}
ll sum=n;
for(ll i=;i<k;i++) printf("%lld ",i*last),sum-=i*last;
printf("%lld",sum);
return ;
}
最新文章
- java视频教程 Java自学视频整理(持续更新中...)
- SSM框架整合总结
- ppa安装php版本
- android 自定义百度地图放大缩小
- 450A - Jzzhu and Children 找规律也能够模拟
- iOS中正则表达式的三种使用方式
- iOS 错误之 NSObject 、CGFloat
- web工程导入新环境的注意事项
- 服务器Windows Server 2008 远程控制安全设置技巧
- 数据结构 栈&;队列
- Linux命令行总结
- js + 加号 报错,IIS 配置
- SpringBoot前后端分离Instant时间戳自定义解析
- QML 用QSortFilterProxyModel实现搜索功能
- GNOME禁用GDM中night-light功能
- 整理整理Linux命令
- 在IDEA中将项目部署到Tomcat的方法及两种模式的区别
- shell 编程每日100行
- Java第09次实验(IO流)
- Sequence 加速
热门文章
- VS Extension+NVelocity系列(一)&mdash;&mdash;构建一个简单的NVelocity解析环境
- 《Cracking the Coding Interview》——第18章:难题——题目7
- USACO Section1.4 Mother&#39;s Milk 解题报告
- 孤荷凌寒自学python第十五天python循环控制语句
- initialization of &#39;zf&#39; is skipped by &#39;case&#39; label原因及解决方法
- PEAR DB 事务相关
- 六、vue侦听属性
- BZOJ 2438:杀人游戏(tarjan+概率)
- 【CF #313】
- 看了就学会之React redux入门示例