
解析:
因为一个素数 x,他的所有倍数中都有因子为 x,所以先筛出所有素数,然后对于某个素数,累加他后面所有倍数的因子
- #include
- 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;
- }