zoukankan      html  css  js  c++  java
  • 【BZOJ2820】YY的GCD

    【BZOJ2820】YY的GCD

    Description

    神犇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

    Sample Output

    30
    2791

    不妨设(n<m)

    答案为(displaystylesum_{g为质数}sum_{i=1}^{lfloor frac{n}{g} floor}sum_{j=1}^{lfloor frac{n}{g} floor}[gcd(i,j)==1])
    根据套路 ,后面的([gcd(i,j)==1]可以写成displaystyle sum_{d|i,d|j}mu(d))
    和式变换一下:(displaystyle sum_{g为质数}sum_{d=1}^{lfloor frac{n}{g} floor}mu(d)lfloor frac{n}{gd} floorlfloor frac{m}{gd} floor)

    根据套路:设(T=gd,则displaystylesum_{T=1}^{n}sum_{d|T且frac{n}{d}为质数}mu(d)lfloor frac{n}{gd} floorlfloor frac{m}{gd} floor)

    又是套路:对于后面两个除法,我们数论分块就可以了。对于(sum_{d|T且frac{n}{d}为质数}mu(d))我们可以预处理出前缀和。

    代码:

    #include<bits/stdc++.h>
    #define N 10000005
    #define ll long long
    using namespace std;
    
    int T;
    int pri[700000];
    ll mu[N],sum[N];
    bool vis[N];
    
    void pre() {
    	mu[1]=1;
    	for(int i=2;i<=10000000;i++) {
    		if(!vis[i]) pri[++pri[0]]=i,mu[i]=-1;
    		for(int j=1;j<=pri[0]&&i*pri[j]<=10000000;j++) {
    			vis[i*pri[j]]=1;
    			if(i%pri[j]==0) {
    				mu[i*pri[j]]=0;
    				break;
    			}
    			mu[i*pri[j]]=-mu[i];
    		}
    	}
    	for(ll i=1;i<=pri[0];i++) {
    		for(ll j=1;j*pri[i]<=10000000;j++) {
    			sum[j*pri[i]]+=mu[j];
    		}
    	}
    	for(ll i=1;i<=10000000;i++) sum[i]+=sum[i-1];
    }
    
    ll n,m;
    int main() {
    	pre();
    	scanf("%d",&T);
    	while(T--) {
    		scanf("%lld%lld",&n,&m);
    		if(n>m) swap(n,m);
    		ll last,ans=0;
    		for(ll i=1;i<=n;i=last+1) {
    			last=min(n/(n/i),m/(m/i));
    			ans+=(sum[last]-sum[i-1])*(n/i)*(m/i);
    		}
    		cout<<ans<<'
    ';
    	}
    	return 0;
    }
    
  • 相关阅读:
    真正的e时代
    在线手册
    UVA 10616 Divisible Group Sums
    UVA 10721 Bar Codes
    UVA 10205 Stack 'em Up
    UVA 10247 Complete Tree Labeling
    UVA 10081 Tight Words
    UVA 11125 Arrange Some Marbles
    UVA 10128 Queue
    UVA 10912 Simple Minded Hashing
  • 原文地址:https://www.cnblogs.com/hchhch233/p/9993024.html
Copyright © 2011-2022 走看看