题意:给定整数
如果将
显然,
然后就是难点求质数的幂了,设每个质数为
我们可以运用小学奥数方法,包含一个质因子
时间复杂度为
code:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;
int n,c[1010101],p[1010101],vis[1010101],cnt;
int main()
{
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
if(vis[i]==0)
{
vis[i]=i;
p[++cnt]=i;
}
for(int j=1;j<=cnt;j++)
{
if(p[j]>vis[i]||p[j]*i>n)
break;
vis[i*p[j]]=p[j];
}
}
for(int i=1;i<=cnt;i++)
{
int x=p[i];
for(int j=n;j;j/=x)
c[i]+=j/x;
printf("%d %d\n",p[i],c[i]);
}
return 0;
}