CF1089F Fractions

题意:
将n-1(n为正整数)分为若干个n的约数倍数和(约数不为1或n).
n<=1e9.
无解输出"NO".
题解:
先考虑无解的情况,因为n-1与n互质,故若所有约数的公约数不为1,则n-1一定不能被表示,即n为一个质数的次幂时无解。
接着考虑剩余情况是否一定有解。
因为多个数过于复杂,故先考虑两个数。首先这两个数要互质,设n-1=ax+by(x,y|n,x,y为互质的大于1的正整数),于是只需证明存在正整数a,b满足等式即可。若n,x,y确定,则a,b为未知数,即可变形为b=(n-1-ax)/y,那么只需证明在a为正整数的时存在正整数b即可,即为:
1.y|(n-1-a
x)
2.n-1-ax>0.
对于1, 由于y|n,故y|(a
x+1),即ax=y-1(mod y)。显然由x,y互质得a取1~y-1中不同数时mod y下是不同的,于是必然存在a,使等式成立。
对于2,即a
x<n-1,又a*x<=(y-1)x=xy-y<=n-y<n-1,故成立。
综上,有解。
那么构造就容易了,x,y取最小的两个不同的质因子即可。必然可以取一个小于sqrt(n)的y,然后在1~y-1内枚举判断,效率O(sqrt(n))。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值