P4980 【模板】Pólya 定理
【题意】
【分析】
【代码】
#include<bits/stdc++.h> using namespace std; #define mp make_pair #define fi first #define se second #define lson now<<1 #define rson now<<1|1 typedef long long ll; const int mod=1e9+7; int qpow(int a,int b) { int res=1; while(b) { if(b&1) res=1LL*res*a%mod; a=1LL*a*a%mod; b>>=1; } return res; } int n; int phi(int x) { int ans=x; for(int i=2;i<=(int)sqrt(x);i++) { if(x%i) continue; ans=ans-ans/i; while(x%i==0) x/=i; } if(x!=1) ans=ans-ans/x; return ans; } int main() { freopen("a.in","r",stdin); freopen("a.out","w",stdout); int T; scanf("%d",&T); while(T--) { scanf("%d",&n); int cnt=sqrt(n); int ans=0; for(int i=1;i<=cnt;i++) { if(n%i) continue; int p1=phi(i),f1=qpow(n,n/i); f1=1LL*f1*p1%mod; ans=(ans+f1)%mod; if(i*i!=n) { int p2=phi(n/i),f2=qpow(n,i); f2=1LL*f2*p2%mod; ans=(ans+f2)%mod; } } printf("%d\n",1LL*qpow(n,mod-2)*ans%mod); } return 0; }