zoukankan      html  css  js  c++  java
  • 【莫比乌斯反演】BZOJ2920-YY的GCD

    【题目大意】

    给定N, M,求1<=x<=N, 1<=y<=M且gcd(x, y)为质数的(x, y)有多少对。

    【思路】

    太神了这道题……蒟蒻只能放放题解:,明早再过来看看还会不会推导过程……

    实用的结论:

    嗯……

    /**************************************************************
        Problem: 2820
        Language: C++
        Result: Accepted
        Time:4164 ms
        Memory:196600 kb
    ****************************************************************/
     
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    const int INF=0x7fffffff;
    const int MAXN=10000000+50;
    typedef long long ll;
    int miu[MAXN],g[MAXN],prime[MAXN],pnum=0;
    ll sum[MAXN];
    int N,M;
     
    void get_miu(int maxn)
    {
        miu[1]=1;
        g[1]=0;
        sum[1]=sum[0]=0;
        for (int i=2;i<maxn;i++) miu[i]=-INF;
        for (int i=2;i<maxn;i++)
        {
            if (miu[i]==-INF)
            {
                miu[i]=-1;
                prime[++pnum]=i;
                g[i]=1;
            }
            for (int j=1;j<=pnum;j++)
            {
                if (i*prime[j]>=maxn) break;
                if (i%prime[j]==0) 
                {
                    miu[i*prime[j]]=0;
                    g[i*prime[j]]=miu[i];
                }
                    else
                    {
                        miu[i*prime[j]]=-miu[i];
                        g[i*prime[j]]=miu[i]-g[i];
                    } 
            }
            sum[i]=sum[i-1]+g[i];
        }
    } 
     
    void get_ans()
    {
        ll ans=0; 
        scanf("%d%d",&N,&M);
        if (N>M) swap(N,M);
        int pos;
        for (int t=1;t<=N;t=pos+1)
        {
            pos=min(N/(N/t),M/(M/t));
            ans+=(ll)(sum[pos]-sum[t-1])*(N/t)*(M/t);
        }
        printf("%lld
    ",ans);
    }
     
    int main()
    {
        get_miu(MAXN);
        int T;
        scanf("%d",&T);
        while (T--) get_ans();
        return 0;
    } 
  • 相关阅读:
    关于android 代码生成布局中遇到的一些问题
    关于选择移动开发平台(android,ios,wp7)的一些看法
    如何成为一个C++高级程序员(转帖)
    最新Windows平台下Android源码的下载(转+原)
    峨眉之巅放歌
    孝感人间
    迁芸(帮客户名字作诗)
    载春
    杨美花(帮客户名字作诗)
    人生几度温泉夜
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/5660048.html
Copyright © 2011-2022 走看看