首页 > Web开发 > 详细

bzoj4459[Jsoi2013]丢番图

时间:2016-08-18 00:47:39      阅读:265      评论:0      收藏:0      [点我收藏+]

bzoj4459[Jsoi2013]丢番图

题意:

丢番图方程:1/x+1/y=1/n(x,y,n∈N+) ,给定n,求出关于n的丢番图方程有多少组解。n≤10^14。

题解:

通分得yn+xn=xy,即xy-xn-yn+n^2=n^2,即(x-n)(y-n)=n^2,故x-n是n^2的因数,所有答案为n^2的因数个数/2,向上取整。一个数的因数个数为该数每种质因数的个数+1的乘积。所以先将n分解质因数,然后ans乘上个数*2+1(因为要求n^2的因数个数)。如果最后n>1,说明有一个质因数大于sqrt(n),则ans还要乘3。最后输出(ans+1)/2即可。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define ll long long
 5 using namespace std;
 6 
 7 long long n,ans;
 8 int main(){
 9     scanf("%lld",&n); ans=1;
10     for(int i=2;(ll)i*i<=n;i++)if(n%i==0){
11         int j=0; while(n%i==0)n/=i,j++; ans*=(j<<1|1); if(n==1)break;
12     }
13     if(n>1)ans*=3;
14     printf("%lld",(ans+1)>>1); return 0;
15 }

 

20160817

bzoj4459[Jsoi2013]丢番图

原文:http://www.cnblogs.com/YuanZiming/p/5782225.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!