码迷,mamicode.com
首页 > Web开发 > 详细

bzoj4459[Jsoi2013]丢番图

时间:2016-08-18 00:48:22      阅读:228      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!