题解:CF1062B Math
题面良心地给了翻译。
有乘法,有开方,显然与素因数分解有关。设
第二问中,我们如何令
细节:
- 要特判
1 。上面的讨论都自动排除了1 这种特殊情况。 - 仔细思考什么时候不用进行乘法操作。
#include <cstdio> #include <cmath> using namespace std;
int times[1000005];
int main(){ int n,nn; scanf("%d",&n); if(n==1){ printf("1 0"); return 0; } int maxtm=0,tmcnt=0; nn=n; for(int i=2;i<=n;i++){ while(!(nn%i)){ nn/=i; times[i]++; } if(times[i]>maxtm)maxtm=times[i]; } for(int i=2;i<=n;i++) if(times[i]<maxtm&×[i]) tmcnt++; if(maxtm==1){ printf("%d 0",n); }else{ int ans1=1; for(int i=2;i<=n;i++) if(times[i]) ans1*=i; int ans2=ceil(log2(maxtm)); if(pow(2,ans2)!=maxtm||tmcnt) ans2++; // printf("[Debug]%d %d\n",maxtm,tmcnt); printf("%d %d",ans1,ans2); }
return 0;
}