zoukankan      html  css  js  c++  java
  • bzoj 2820

    subsubsection{例题3}
    href{http://www.lydsy.com/JudgeOnline/problem.php?id=2820}{BZOJ 2820 YY的GCD}
    题目大意:求有多少数对((x,y))满足$xin left[ 1,n ight] ,yin left[ 1,m ight] (满足)(x,y)(为质数 做法: par 首先这个题目和上一个题目不一样的地方是他需要一个特殊的转化 ext{令} k=&min(n,m);\ ans=&sum_{p}^ksum_{i=1}^nsum_{j=1}^mleft[ (i,j)=p ight] \ =&sum_{p}^ksum_{d=1}^k mu(d)lfloor frac{n}{pd} floor lfloor frac{m}{pd} floor \ ext{令}T=&pd\ ans=&sum_{T=1}^{k}lfloor frac{n}{T} floor lfloor frac{m}{T} floor sum_{p|T}^{k}mu(frac{T}{p})\ ext{令}F(k)=&sum_{p|T}^kmu(frac{T}{p})\ ext{则}ans=&sum_{T=1}^kF(k)lfloor frac{n}{T} floor lfloor frac{m}{T} floor \ egin{align} ext{令} k=&min(n,m);\ ans=&sum_{p}^ksum_{i=1}^nsum_{j=1}^mleft[ (i,j)=p ight] \ =&sum_{p}^ksum_{d=1}^k mu(d)lfloor frac{n}{pd} floor lfloor frac{m}{pd} floor \ ext{令}T=&pd\ ans=&sum_{T=1}^{k}lfloor frac{n}{T} floor lfloor frac{m}{T} floor sum_{p|T}^{k}mu(frac{T}{p})\ ext{令}F(k)=&sum_{p|T}^kmu(frac{T}{p})\ ext{则}ans=&sum_{T=1}^kF(k)lfloor frac{n}{T} floor lfloor frac{m}{T} floor \ end{align} 线性筛素数的时候对)F(k)$前缀和处理
    然后就转变为和例二 ef{2}一样的做法,枚举除法的取值了
    egin{lstlisting}[language={[ANSI]C}]

    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #define N 10000000
    #define ll long long 
    using namespace std;
     
    bool not_prime[N];
    ll prime[N];
    ll sum[N];
    ll mu[N];
    ll tot;
     
    void Mu(int n){
        mu[1]=1;
        for(int i=2;i<=n;i++){
            if(!not_prime[i]){
                prime[++tot]=i;
                mu[i]=-1;
            }
            for(int j=1;prime[j]*i<=n;j++){
                not_prime[prime[j]*i]=1;
                if(i%prime[j]==0){
                    mu[prime[j]*i]=0;
                    break;
                }
                mu[prime[j]*i]=-mu[i];
            }
        }
        for(int i=1;i<=tot;++i)
            for(int j=1;j*prime[i]<=n;++j)
                sum[j*prime[i]]+=(ll)mu[j];
        for(int i=1;i<=n;++i)
            sum[i]+=(ll)sum[i-1];
    }
     
    ll ans(int n,int m){
        if(n>m)swap(n,m);
        int last,i;ll re=0;
        for(i=1;i<=n;i=last+1){
            last=min(n/(n/i),m/(m/i));
            re+=(ll)(n/i)*(m/i)*(sum[last]-sum[i-1]);
        }   
        return re;
    }
     
    int main(){
        Mu(N);
        int T;
        int a,b;
        scanf("%d",&T);
        while(T--){
            scanf("%d%d",&a,&b);
            ll Ans=ans(a,b);
            printf("%lld
    ",Ans);
        }
        return 0;
    }
    

    end{lstlisting}
    这已经是第n次被long long卡一个小时以上了

  • 相关阅读:
    ObjectiveC语法快速参考
    IIS网站全部显示无权访问需要登录
    如何让自己的网站尽快收录绍兴114导航
    asp.net的运行原理
    WPF学习视频资料
    Asp.net MVC3 自定义HtmlHelper控件
    Unity3D中C#和JS的方法互相調用
    对于冒泡算法的思考,大牛可一笑而过~~
    2013年年前瞻望与计划
    使用vs2010编辑Unity脚本,配置方法
  • 原文地址:https://www.cnblogs.com/qdscwyy/p/8017641.html
Copyright © 2011-2022 走看看