解析:文章来源:https://uudwc.com/A/zkvEa
因为一个素数 x,他的所有倍数中都有因子为 x,所以先筛出所有素数,然后对于某个素数,累加他后面所有倍数的因子文章来源地址https://uudwc.com/A/zkvEa
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e7+5;
int x,f,p[N],s;
int main(){
scanf("%d",&x);
s=sqrt(x);
printf("f(%d)=",x);
for(int i=2;i<=s;i++) if(!p[i])
for(int j=i*i;j<=x;j+=i) p[j]=1;
for(int i=2;i<=x;i++){
if(!p[i]){
ll cnt=0;
for(int j=i;j<=x;j+=i){
int t=j;
while(t%i==0){
cnt+=x+1-j;
t/=i;
}
}
if(!f) f=1;
else printf("*");
printf("%d",i);
if(cnt>1) printf("^%lld",cnt);
}
}
return 0;
}