C 华华给月月出题 积性函数
作者:互联网
https://ac.nowcoder.com/acm/contest/392/C
1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int mod = 1e9 + 7; 5 const int maxn = 1.3e7 + 5; 6 int prime[maxn], n; 7 ll sum[maxn]; 8 bool v[maxn]; 9 ll quickpow(ll x,ll y) 10 { 11 ll res = 1; 12 while(y){ 13 if(y & 1) res = res*x%mod; 14 y >>= 1; 15 x = x*x%mod; 16 } 17 return res; 18 } 19 ll primes() 20 { 21 int m = 0; 22 for(int i = 2; i <= n; i++){ 23 if(!v[i]){ 24 prime[++m] = i; 25 v[i] = 1; 26 sum[i] = quickpow(i,n); 27 } 28 for(int j = 1; j <= m; j++){ 29 if(i*prime[j] > n || i%prime[j] == 0) break; 30 v[i*prime[j]] = 1; 31 sum[i*prime[j]] = sum[i]*sum[prime[j]]%mod; 32 } 33 } 34 ll ans = 1; 35 for(int i = 2; i <= n; i++){ 36 ans ^= sum[i]; 37 } 38 return ans; 39 } 40 int main() 41 { 42 cin>>n; 43 printf("%lld\n",primes()); 44 return 0; 45 }
标签:prime,华华,积性,res,ll,int,出题,maxn,mod 来源: https://www.cnblogs.com/pangbi/p/14493518.html