题目链接:http://exam.upc.edu.cn/problem.php?cid=1442&pid=0
思路:晒素数,求次数。
代码:
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int maxn = 1e6+5;
const int mod = 1e7+7;
int n, prime[maxn], num_prime, isNotPrime[maxn], ans[maxn];
void solve()
{
isNotPrime[0]=1; isNotPrime[1]=1;
for(int i=2; i<=n; i++){
if(!isNotPrime[i]) prime[num_prime++]=i, ans[i]++;
for(int j=0; j<num_prime && i*prime[j]<=n; j++){
isNotPrime[i*prime[j]]=1;
if(!(i%prime[j])) break;
}
}
for(int i=0; i<num_prime; i++){
LL p=prime[i], v=0;
printf("%lld ", p);
while(p<=n){
v += n/p;
p *= prime[i];
}
printf("%lld\n", v);
}
}
int main()
{
cin >> n;
solve();
return 0;
}