• 一道数学题


    /*
    由于无头大白鹅学长在题解里把这个题略了
    我稍微解释一下这道题
    
    1-n乘起来最大就是 n!
    下面我们考虑怎么保证他是一个完全平方数
    
    对于每个数 x 我们分解成 x=p1^a1*p2^a2*p3^a3.....
    其中pi是质数 (他有个学名叫做 唯一分解定理)
    
    再考虑一个完全平方数有什么性质 
    4=2^2  16=2^4   36=2^2*3^2  144=2^4*3^2 
    可以看出(也可以自己证出)对于一个完全平方数x
    他分解完之后 每个ai都是偶数
    
    好
    
    现在思路明确 把n!分解好 对于ai是奇数的 
    我们把那个单独的pi扔掉即可
    
    然后说一下怎么求n!里面有几个pi
    如下代码中的Solve函数  ai=n/pi+n/pi^2+n/pi^3+n/pi^4.....
    直到pi^x>n 具体怎么证的自行研究 
    
    然后没了 
    另外取模的数是1e8+7 不是1e9+7 
    另外别忘了开longlong 
     
    */
    #include<iostream>
    #include<cstdio>
    #define maxn 5000010
    #define mod 100000007
    #define ll long long
    using namespace std;
    ll n,prime[maxn/10],c[maxn/10],num,ans=1;
    bool f[maxn];
    void Prime(){
        for(int i=2;i<=n;i++){
            if(f[i]==0)prime[++num]=i;
            for(int j=1;j<=num;j++){
                if(i*prime[j]>maxn-10)break;
                f[i*prime[j]]=1;
                if(i%prime[j]==0)break;
            }
        }
    }
    void Solve(){
        for(int i=1;i<=num;i++){
            ll P=prime[i];
            if(P>n)break;
            while(n>=P){
                c[i]+=n/P;P*=prime[i];
            }
        }
    }
    ll Qc(ll a,ll b){
        ll r=1;
        while(b){
            if(b&1)r=r*a%mod;
            b>>=1;a=a*a%mod;
        }
        return r%mod;
    }
    int main(){
        cin>>n;
        Prime();Solve();
        for(int i=1;i<=num;i++)
            if(c[i]&1)c[i]--;
        for(int i=1;i<=num;i++){
            if(prime[i]>n)break;
            ans=ans*Qc(prime[i],c[i])%mod;
        }
        cout<<ans<<endl;
        return 0;
    }
     
  • 相关阅读:
    转载--php函数使用--var_export
    ZkApi的方法跨域访问ZkResource的静态资源文件出现的问题
    修改html内联样式的方法
    linux下的npm安装
    爬虫之静态网页爬虫(基础知识)
    利用jQuery使用HTML的formdata属性实现文件上传
    细说form表单
    session
    cookie和session(会话跟踪)
    同源策略和跨域问题
  • 原文地址:https://www.cnblogs.com/yanlifneg/p/10088839.html
Copyright © 2020-2023  润新知