真正的危机不是机器人像人一样思考,而是人像机器一样思考。 ——凉宫春日的忧郁

[BZOJ 2820]YY的GCD

[BZOJ 2820]YY的GCD

题目

神犇YY虐完数论后给傻×kAc出了一题给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对kAc这种
傻×必然不会了,于是向你来请教……多组输入

INPUT

第一行一个整数T 表述数据组数接下来T行,每行两个正整数,表示N, M

OUTPUT

T行,每行一个整数表示第i组数据的结果

SAMPLE

INPUT

2

10 10

100 100

OUTPUT

30

2791

解题报告

反演首题(说好NOIP不考反演的QAQ,最近考了这么多QAQ)

设$n\leqslant m$

$$\sum_{isprime(p)} \sum_{a=1}^{n} \sum_{b=1}^{m}gcd(a,b)==p$$

$$\sum_{isprime(p)} \sum_{a=1}^{\left \lfloor \frac{n}{p} \right \rfloor} \sum_{b=1}^{\left \lfloor \frac{m}{p} \right \rfloor}gcd(a,b)==1$$

$$\sum_{isprime(p)}  \sum_{a=1}^{\left \lfloor \frac{n}{p} \right \rfloor} \sum_{b=1}^{\left \lfloor \frac{m}{p} \right \rfloor} \sum_{d\mid gcd(a,b)} \mu (d)$$

$$\sum_{isprime(p)}  \sum_{a=1}^{\left \lfloor \frac{n}{p} \right \rfloor} \sum_{b=1}^{\left \lfloor \frac{m}{p} \right \rfloor} \sum_{d\mid a\wedge d\mid b} \mu (d)$$

$$\sum_{isprime(p)}\sum_{d=1}^{\left \lfloor \frac{n}{p} \right \rfloor}\mu (d)\left \lfloor \frac{n}{pd} \right \rfloor \left \lfloor \frac{m}{pd} \right \rfloor$$

设$k=pd$

$$\sum_{k=1}^{n}\sum_{isprime(p)\wedge p\mid k}\mu (\frac{k}{p})\left \lfloor \frac{n}{k} \right \rfloor \left \lfloor \frac{m}{k} \right \rfloor$$

$$\sum_{k=1}^{n}F(k)\left \lfloor \frac{n}{k} \right \rfloor \left \lfloor \frac{m}{k} \right \rfloor$$

woc,我tm写了点啥

然后就线性筛一下,可以GG

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 inline int read(){
 6     int sum(0);
 7     char ch(getchar());
 8     for(;ch<'0'||ch>'9';ch=getchar());
 9     for(;ch>='0'&&ch<='9';sum=sum*10+(ch^48),ch=getchar());
10     return sum;
11 }
12 typedef long long L;
13 int t,n,m;
14 bool isnotprime[10000005];
15 int prime[10000005],mu[10000005],num;
16 L f[10000005];
17 inline void play_table(){
18     mu[1]=1;
19     for(int i=2;i<=10000000;++i){
20         if(!isnotprime[i]){
21             prime[++num]=i;
22             mu[i]=-1;
23         }
24         for(int j=1;j<=num&&i*prime[j]<=10000000;++j){
25             isnotprime[i*prime[j]]=1;
26             if(i%prime[j]==0){
27                 mu[i*prime[j]]=0;
28                 break;
29             }
30             else
31                 mu[i*prime[j]]=-mu[i];
32         }
33     }
34     for(int i=1;i<=num;++i){
35         int p(prime[i]);
36         for(int j=1;j*p<=10000000;++j)
37             f[j*p]+=mu[j];
38     }
39     for(int i=1;i<=10000000;++i)
40         f[i]+=f[i-1];
41 }
42 inline int gg(){
43     freopen("YYnoGCD.in","r",stdin);
44     freopen("YYnoGCD.out","w",stdout);
45     play_table();
46     t=read();
47     while(t--){
48         L ans(0);
49         n=read(),m=read();
50         if(n>m)
51             swap(n,m);
52         for(int i=1,j;i<=n;i=j+1){
53             j=min(n/(n/i),m/(m/i));
54             ans+=(f[j]-f[i-1])*(n/i)*(m/i);
55         }
56         printf("%lld\n",ans);
57     }
58     return 0;
59 }
60 int K(gg());
61 int main(){;}
View Code

 

posted @ 2017-10-07 16:35  Hzoi_Mafia  阅读(145)  评论(0编辑  收藏  举报
我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。 ——死神