码迷,mamicode.com
首页 > 其他好文 > 详细

【BZOJ】【1101】【POI2007】Zap

时间:2015-02-16 18:19:17      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:

莫比乌斯反演

  PoPoQQQ的讲义例一的一半……好吧这题是那题的基础部分= =很水……

WA了一次:因为没强制类型转换LL

技术分享
 1 //BZOJ 1101
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<iostream>
 6 #include<algorithm>
 7 #define rep(i,n) for(int i=0;i<n;++i)
 8 #define F(i,j,n) for(int i=j;i<=n;++i)
 9 #define D(i,j,n) for(int i=j;i>=n;--i)
10 using namespace std;
11 
12 int getint(){
13     int v=0,sign=1; char ch=getchar();
14     while(ch<0||ch>9) {if (ch==-) sign=-1; ch=getchar();}
15     while(ch>=0&&ch<=9) {v=v*10+ch-0; ch=getchar();}
16     return v*=sign;
17 }
18 /*******************tamplate********************/
19 const int N=50010;
20 typedef long long LL;
21 int prime[N],mu[N],sum[N];
22 bool check[N];
23 void getmu(){
24     mu[1]=1;
25     int tot=0;
26     for(int i=2;i<N;++i){
27         if (!check[i]){
28             prime[tot++]=i;
29             mu[i]=-1;
30         }
31         rep(j,tot){
32             if (i*prime[j]>N) break;
33             check[i*prime[j]]=1;
34             if (i%prime[j])
35                 mu[i*prime[j]]=-mu[i];
36             else{
37                 mu[i*prime[j]]=0;
38                 break;
39             }
40         }
41     }
42     F(i,1,N-1) sum[i]=sum[i-1]+mu[i];
43 }
44 LL calc(int m,int n,int k){
45     int i,last;
46     LL re=0;
47     n/=k; m/=k;
48     for(i=1;i<=m && i<=n;i=last+1){
49         last=min(n/(n/i),m/(m/i));
50         re+=(sum[last]-sum[i-1])*(m/i)*(n/i);
51     }
52     return re;
53 }
54 int main(){
55     int n=getint(),a,b,d;
56     getmu();
57     F(i,1,n){
58         a=getint(); b=getint(); d=getint();
59         printf("%lld\n",calc(a,b,d));
60     }
61     return 0;
62 }
View Code

 

【BZOJ】【1101】【POI2007】Zap

标签:

原文地址:http://www.cnblogs.com/Tunix/p/4294371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!