今天过的非常bad,因为我发现前面有些数论题我还是没搞懂
思路:
这道题,我们去分类计算贡献
贡献就是(每个质因子在式子里的个数+1)
把这个贡献乘起来,就是答案
我们去枚举质因子,然后对于每一个质因子,都去直接在1*2*3*....*n这个式子里面计算贡献
比如,对于质因子p,考虑p在式子里的贡献,p*p在式子里的贡献,....
那么p在式子里面出现了n/p次,p*p在式子里出现了n/(p*p),....
因此就是这么写
Code:
#include <bits/stdc++.h>
using namespace std;
const int mxn=1e6+10;
int n,len=0;
int prime[mxn],vis[mxn];
void init(int n){
for(int i=2;i<=n;i++){
if(!vis[i]) prime[++len]=i;
for(int j=1;i*prime[j]<=n;j++){
vis[i*prime[j]]=1;
if(i%prime[j]==0) break;
}
}
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n;
init(n);
for(int i=1;i<=len;i++){
int p=prime[i];
int res=0;
for(int j=n;j;j/=p) res+=j/p;
cout<<p<<" "<<res<<'\n';
}
}