zoukankan      html  css  js  c++  java
  • Luogu P5221 Product

    题目
    注意一下空间限制。
    (f(n)=prodlimits_{i=1}^nprodlimits_{j=1}^nij,g(n)=prodlimits_{i=1}^nprodlimits_{j=1}^n(i,j))
    那么答案就是(f(n)g(n)^{-2}).
    显然(f(n)=(n!)^{2n})
    (g(n)=prodlimits_{d=1}^nd^{sumlimits_{i=1}^{lfloorfrac nd floor}sumlimits_{j=1}^{lfloorfrac nd floor}[(i,j)=1]}=prodlimits_{d=1}^nd^{sumlimits_{i=1}^{lfloorfrac nd floor}2varphi(i)-1})
    然后就可以直接做了。
    注意一下由于Euler定理指数部分的要对(P-1)取模。

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1000007,P=104857601,M=104857600;
    int pr[N>>3],m,phi[N];bool f[N];
    int inc(int a,int b){return a+=b,a>=M? a-M:a;}
    int dec(int a,int b){return a-=b,a<0? a+M:a;}
    int mul(int a,int b){return 1ll*a*b%P;}
    int sqr(int a){return mul(a,a);}
    int power(int a,int k){int r=1;for(;k;k>>=1,a=mul(a,a))if(k&1)r=mul(a,r);return r;}
    int fac(int n){int s=1;for(;n;--n)s=mul(s,n);return s;}
    int inv(int a){return power(a,P-2);}
    int cal1(int n){return power(fac(n),n<<1);}
    int cal2(int n)
    {
        phi[1]=f[1]=1;int ans=1;
        for(int i=2,j,x;i<=n;++i)
        {
    	if(!f[i]) pr[++m]=i,phi[i]=i-1;
    	for(j=1;j<=m&&i*pr[j]<=n;++j)
    	{
    	    f[x=i*pr[j]]=1;
    	    if(i%pr[j]) phi[x]=phi[i]*phi[pr[j]];
    	    else {phi[x]=phi[i]*pr[j];break;}
    	}
        }
        for(int i=2;i<=n;++i) phi[i]=inc(phi[i-1],phi[i]);
        for(int i=1;i<=n;++i) phi[i]=dec(inc(phi[i],phi[i]),1);
        for(int i=1;i<=n;++i) ans=mul(ans,power(i,phi[n/i]));
        return ans;
    }
    int main(){int n;cin>>n,cout<<mul(cal1(n),sqr(inv(cal2(n))));}
    
  • 相关阅读:
    java的初始化
    java继承
    java多态
    static、final关键字
    java的清理
    java访问权限控制
    java对象与引用及参数传递
    java学习--学生成绩管理系统
    The Nth Item 南昌网络赛(递推数列,分段打表)
    Random Access Iterator 徐州网络赛(树形dp)
  • 原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/11913995.html
Copyright © 2011-2022 走看看