bzoj 4916 神犇和蒟蒻

来源:互联网 发布:新手怎么做淘宝分销 编辑:程序博客网 时间:2024/06/05 04:49

//bzoj 4916 神犇与蒟蒻 #include<map>#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#define N 10000000#define ll long long#define M(a) memset(a,0,sizeof a)#define fo(i,j,k) for(i=j;i<=k;i++)const int mxn=10000005;const int mod=1e9+7;using namespace std;map <int,int> mp;bool vis[mxn];ll phi[mxn];ll inv2,inv6;int m,T,pri[mxn];inline ll ksm(ll x,int k){if(k==1) return x;ll tmp=ksm(x,k>>1);if(k&1) return tmp*tmp%mod*x%mod;return tmp*tmp%mod;}inline void init(){int i,j;puts("1");phi[1]=1;inv2=500000004;inv6=166666668;fo(i,2,N){if(!vis[i]) pri[++pri[0]]=i,phi[i]=i-1;for(j=1;j<=pri[0] && (ll)i*pri[j]<=N;j++){vis[i*pri[j]]=1;if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j]%mod;break;}phi[i*pri[j]]=phi[i]*(pri[j]-1)%mod;}}fo(i,1,N) phi[i]=phi[i]*i%mod;fo(i,1,N) phi[i]=(phi[i]+phi[i-1])%mod;}inline ll S(ll x) {return (x*(x+1)%mod*inv2)%mod;} inline ll solve(ll n){int i,j;if(n<=N) return phi[n];if(mp.count(n)) return mp[n];ll now=n*(n+1)%mod*(n+n+1)%mod*inv6%mod,sum=0;for(int i=2,last=0;i<=n;i=last+1){last=n/(n/i);sum=(sum+((S(last)-S(i-1)+mod))%mod*solve(n/i)%mod)%mod;}mp[n]=(now-sum+mod)%mod;return (now-sum+mod)%mod;}int main(){int i,j;ll x;init();scanf("%lld",&x);printf("%lld\n",solve(x));return 0;}

4916: 神犇和蒟蒻

Time Limit: 10 Sec  Memory Limit: 512 MB
Submit: 82  Solved: 50
[Submit][Status][Discuss]

Description

很久很久以前,有一只神犇叫yzy;
很久很久之后,有一只蒟蒻叫lty;

Input

请你读入一个整数N;1<=N<=1E9,A、B模1E9+7;

Output

请你输出一个整数A=\sum_{i=1}^N{\mu (i^2)};
请你输出一个整数B=\sum_{i=1}^N{\varphi (i^2)};

Sample Input

1

Sample Output

1
1

HINT

Source

By Monster_Yi







【分析】

杜教筛...第一次做...也不知道怎么回事

https://www.baidu.com/link?url=DrLxnCCPgy4onbGkvRUycEW8dKwWsR7J6Rclh8v1eMr9JwPg9zEZpBbIRYfQrn6c24_hNlYRJhErM3Ms7DEvZwjR1SS8GzP-lXWwVKgaLoK&wd=&eqid=9d6f2517000c3d1400000003592f703f



【代码】




原创粉丝点击