Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=4135

容斥原理

View Code
 1 #include <iostream>
2 #include <cstdio>
3 #include <cmath>
4 using namespace std;
5 int p[100],cnt;
6 long long a,b,aa,bb;
7 void pt(int n,int *p,int &c)
8 {
9 c=0;
10 int i,m=(int)sqrt(n);
11 for (i=2;i<=m;i++) if (n%i==0)
12 {
13 p[++c]=i;
14 while (n%i==0) n/=i;
15 }
16 if (n>1) p[++c]=n;
17 }
18 void dfs(int k,int sg,long long f)
19 {
20 if (k>cnt)
21 {
22 aa+=sg*a/f;
23 bb+=sg*b/f;
24 return;
25 }
26 dfs(k+1,sg,f);
27 dfs(k+1,-sg,f*p[k]);
28 }
29 int main()
30 {
31 int T,C=0;
32 cin>>T;
33 long long ans;
34 int n;
35 while (T--)
36 {
37 cin>>a>>b>>n;
38 a--;
39 aa=0; bb=0;
40 pt(n,p,cnt);
41 dfs(1,1,1);
42 ans=bb-aa;
43 cout<<"Case #"<<++C<<": "<<ans<<endl;
44 }
45 return 0;
46 }

 

posted on 2012-03-07 17:09  Qiuqiqiu  阅读(240)  评论(0编辑  收藏  举报