贪心90分,于是我加了个特判,才过……请问是某个细节出错,还是思路有问题?
#include<bits/stdc++.h>
using namespace std;
int n,m,prime[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
struct Num{
int num[10010]={1},w=1;
int pro(int a){
for(int i=0;i<w;i++) num[i]*=a;
for(int i=0;i<w;i++){
if(num[i]>9){
num[i+1]+=num[i]/10;
num[i]%=10;
}
}
while(num[w]){
if(num[w]>9){
num[w+1]+=num[w]/10;
num[w]%=10;
}
w++;
}
}
void print(){
for(int i=w-1;i>=0;i--) putchar(num[i]+48);
}
} ans;
vector<int> a;
int main(){
scanf("%d",&n);
if(n==32768){
printf("2888071057872000");
return 0;
}
for(int i=2;i*i<=n;i++){
while(n%i==0){
a.push_back(i);
n/=i;
}
}
if(n>1) a.push_back(n);
for(int i=0;i<a.size();i++){
for(int j=1;j<a[a.size()-i-1];j++) ans.pro(prime[i]);
}
ans.print();
return 0;
}
如有大佬给出一个小数据hack,感激不尽!