Omni Inspirations

problems & programs ~

统计

留言簿

Friends

阅读排行榜

评论排行榜

Pku 2917 Diophantus of Alexandria

题意:
求 1/x+1/y=1/z x,y的整数解对数

做法:
先将y表示成 y=(x*z)/(x-z)
然后呢...我就不知道然后了
baidu了题解后才知道了
设w=x-z 则x=z+w 那么 y=(z*z+w*z)/w=z*z/w+z
所以转化为了求z*z/w的整数解个数
即z*z的约数个数  因为要求一对的 所以答案是 (约数个数+1)/2

然后就解决了。

 1 #include <cstdio>
 2 #define n 50005
 3 int p[n],T,N,ret;
 4 bool mk[n];
 5 inline void mkprime()
 6 {
 7     for (int i=2;i<n;++i)
 8     if (!mk[i])
 9         for (int j=i<<1;j<n;j+=i)
10             mk[j]=1;
11     for (int i=2;i<n;++i)
12     if (!mk[i])    p[++p[0]]=i;
13 }
14 inline int getlog(int &N,int prime)
15 {
16     int ret=0;
17     for (;N%prime==0;N/=prime,++ret);
18     return ret;
19 }
20 int main()
21 {
22     mkprime();
23     scanf("%d",&T);
24     for (int Te=1;Te<=T;++Te)
25     {
26         scanf("%d",&N);
27         ret=1;
28         for (int i=1;i<=p[0]&&p[i]*p[i]<=N;++i)
29         if (N%p[i]==0)    ret*=(getlog(N,p[i])<<1)+1;
30         if (N>1)    ret*=3;
31         printf("Scenario #%d:\n%d\n\n",Te,(ret+1)>>1);
32     }
33     return 0;
34 }
35 


posted on 2010-04-23 10:54 jsn1993 阅读(318) 评论(0)  编辑 收藏 引用 所属分类: Math


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理