#include<bits/stdc++.h>
using namespace std;
const int N=1e7+3,M=1e6+3;
int n,tot;
int prime[M],pre[N],r[N];
long long ans[M];
bool st[N];
inline void get(){
for(int i=2;i<=n;i++){
if(!st[i]){
prime[++tot]=i;
r[i]=tot;
ans[tot]+=n-i+1; //质数分解后为本身
}
for(int j=1;prime[j]*i<=n;j++){
int d=prime[j]*i,e=j,res=n-prime[j]*i+1;
st[d]=1;
pre[d]=j;
while(e){
ans[e]+=res;
d/=prime[e];
e=pre[d];
} //非质数可以一直分解到质数
ans[r[d]]+=res;
if(i%prime[j]==0) break;
}
}
} //复杂度为2~n的所有质因子个数
int main(){
cin.tie(nullptr)->sync_with_stdio(false);
cin>>n;
get();
cout<<"f("<<n<<")=";
for(int i=1;i<=tot;i++){
if(!ans[i]) break;
if(i>1) cout<<"*";
if(ans[i]>1) cout<<prime[i]<<'^'<<ans[i];
else cout<<prime[i];
}
}
2023百度之星初赛 第三场C-新的阶乘
于 2023-09-24 22:08:14 首次发布