zoukankan      html  css  js  c++  java
  • 线性筛积性函数+反演T套路——bzoj4407

    #include<bits/stdc++.h>
    using namespace std;
    #define ll long long
    #define mod 1000000007
    #define maxn 5000005
    ll n,m,K;
    
    ll Pow(ll a,ll b){
        ll res=1;
        while(b){
            if(b%2)res=res*a%mod;
            b>>=1;a=a*a%mod;
        }
        return res;
    }
    bool vis[maxn];
    ll prime[maxn],G[maxn],sum[maxn],mu[maxn],mm;
    void init(){
        mu[1]=G[1]=1;
        for(int i=2;i<maxn;i++){
            if(!vis[i]){
                prime[++mm]=i;
                mu[i]=-1;
                G[i]=Pow(i,K)-1;
                if(G[i]<0)G[i]+=mod;
            }
            for(int j=1;j<=mm;j++){
                if(i*prime[j]>=maxn)break;
                vis[i*prime[j]]=1;
                if(i%prime[j]==0){
                    mu[i*prime[j]]=0;
                    G[i*prime[j]]=G[i]*Pow(prime[j],K)%mod;
                    break;
                }
                else {
                    mu[i*prime[j]]=-mu[i];
                    G[i*prime[j]]=G[i]*G[prime[j]]%mod;
                }
            }
        }
        for(int i=1;i<maxn;i++)
            sum[i]=(sum[i-1]+G[i])%mod;
    }
    
    int main(){
        int t;cin>>t>>K;
        init();
        while(t--){
            cin>>n>>m;
            if(n>m)swap(n,m);
            ll ans=0;
            for(int l=1,r;l<=n;l=r+1){
                r=min(n/(n/l),m/(m/l));
                ll tmp=((sum[r]-sum[l-1])%mod+mod)%mod;
                ans=(ans+tmp*(n/l)%mod*(m/l)%mod)%mod;
            }
            cout<<ans<<'
    ';
        }
    }
  • 相关阅读:
    fenby C语言P21
    fenby C语言 P20
    fenby C语言 P19
    fenby C语言 P18
    fenby C语言 P17
    fenby C语言 P16
    fenby C语言 P15
    fenby C语言 P14
    Python学习之路:subprocess模块和面向对象
    Python学习之路:XML模块
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11152863.html
Copyright © 2011-2022 走看看