欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

P5253-丢番图【数论】

发布时间:2023/12/3 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 P5253-丢番图【数论】 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

正题

题目链接:https://www.luogu.org/problem/P5253


题目大意

给一个nnn,求有多少对x,y(x≤y)x,y(x\leq y)x,y(xy)使得
1x+1y=1n\frac{1}{x}+\frac{1}{y}=\frac{1}{n}x1+y1=n1


解题思路

x+yxy=1n\frac{x+y}{xy}=\frac{1}{n}xyx+y=n1
n(x+y)=xyn(x+y)=xyn(x+y)=xy
xy−n(x+y)=0xy-n(x+y)=0xyn(x+y)=0
xy−n(x+y)+n2=n2xy-n(x+y)+n^2=n^2xyn(x+y)+n2=n2
(x−n)(y−n)=n2(x-n)(y-n)=n^2(xn)(yn)=n2
a=x−n,b=y−na=x-n,b=y-na=xn,b=yn,问题就变为了求有多少对(a,b)(a,b)(a,b)

然后对于∑pici=n\sum p_i^{c_i}=npici=n

答案就是∏(2∗ci)\prod (2*c_i)(2ci)

注意要考虑本质不同


codecodecode

#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; ll n,ans=1; int main() {scanf("%lld",&n);for(ll i=2;i*i<=n;i++){if(!(n%i)){int z=0;while(!(n%i)) n/=i,z++;ans*=2*z+1;}}if(n!=1) ans*=3; printf("%lld",ans/2+(ans&1)); }

总结

以上是生活随笔为你收集整理的P5253-丢番图【数论】的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。