标签:long std lse data- turn 要求 msu main 推导
2
3
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=1e6+1,M=1e9+7; 4 int a[N],n,v[N],cnt,b[N],num[N];//b[x]表示x的最小质因子是质数中的第几号 5 long long ans=1; 6 int read() 7 { 8 int x=0,f=1; 9 char ch=getchar(); 10 while(ch<‘0‘||ch>‘9‘) 11 { 12 if(ch==‘-‘) f=-1; 13 ch=getchar(); 14 } 15 while(ch>=‘0‘&&ch<=‘9‘) 16 { 17 x=x*10+ch-‘0‘; 18 ch=getchar(); 19 } 20 return x*f; 21 } 22 void write(int x) 23 { 24 if(x<0) 25 { 26 putchar(‘-‘); 27 x=-x; 28 } 29 if(x>9) write(x/10); 30 putchar(x%10+‘0‘); 31 } 32 void pre() 33 { 34 for(int i=2;i<=1000000;i++) 35 { 36 if(!v[i])a[++cnt]=i,b[i]=cnt; 37 for(int j=1;j<=cnt&&a[j]*i<=1000000;j++) 38 { 39 v[i*a[j]]=1;b[i*a[j]]=j; 40 if(i%a[j]==0)break; 41 } 42 } 43 } 44 void ff(int x) 45 { 46 while(x!=1) 47 { 48 num[b[x]]++;//num[i]表示i这个序号代表的质因子出现的次数(也就是b[i]的幂的次数啦) 49 x/=a[b[x]];//x不断更新 50 } 51 } 52 int main() 53 { 54 55 n=read(); 56 pre(); 57 for(int i=2;i<=n;i++) 58 ff(i); 59 for(int i=1;i<=cnt;i++) 60 ans=ans*(num[i]*2+1)%M; 61 printf("%lld",ans); 62 return 0; 63 }
标签:long std lse data- turn 要求 msu main 推导
原文地址:https://www.cnblogs.com/ljy-endl/p/11378174.html