zoukankan      html  css  js  c++  java
  • 欧拉降幂,基本计算定理——cf615D

     用基本算数定理求约数和的思想来计算,

    首先用pi,ci来表示第i个质数,指数为i,然后对于每个pi,pi^2...都有指数为mul{(c_1+1)(c_2+1)(c_i-1+1)(c_i+1+1)...}的贡献,所以枚举累乘即可

    注意要用欧拉降幂来计算质数,同时用中间挖掉一个值的累乘,可以预处理前缀后缀乘积来做

    /*
    枚举每个不同的质因子pi,枚举其指数[1,ci]
    累乘每个pi^ci的贡献即可 
    */
    #include<bits/stdc++.h>
    using namespace std;
    #define N 200005
    #define ll long long
    #define mod 1000000007
    
    ll n,a[N];
    ll p[N],c[N],m;
    ll suf[N],pre[N],ans;
    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;
    }
    
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+1+n);
        for(int i=1;i<=n;i++){
            if(p[m]!=a[i]){
                p[++m]=a[i];
                c[m]=1;
            }    
            else c[m]++;
        } 
        
        suf[m+1]=1;pre[0]=1;
        for(ll i=m;i>=1;i--)
            suf[i]=suf[i+1]*(c[i]+1)%(mod-1);
        for(ll i=1;i<=m;i++)
            pre[i]=pre[i-1]*(c[i]+1)%(mod-1);
        
        ans=1;
        for(ll i=1;i<=m;i++){
            ll tmp=1;
            ll prod=pre[i-1]*suf[i+1]%(mod-1);
            for(ll j=1;j<=c[i];j++){
                tmp=tmp*p[i]%mod;
                ans=ans*Pow(tmp,prod)%mod;
            } 
        }
        cout<<ans<<endl;
    }
  • 相关阅读:
    jquery.tmpl.js 模板引擎用法
    var 的使用
    BUG集锦
    jquery Ajax异步请求之session
    找到多个与名为“Login”的控制器匹配的类型
    蒙板 模态对话框
    mvc通过ActionFilterAttribute做登录检查
    MVC 分页
    MVC 创建线程内的db单例
    Servlet生命周期中的service方法分析
  • 原文地址:https://www.cnblogs.com/zsben991126/p/11439143.html
Copyright © 2011-2022 走看看