不知道为什么只有10分,哪位大佬帮忙看看?
#include<bits/stdc++.h>
using namespace std;
const int N=110;
struct bint{
int a[N+N],size;
bint(int a2[],int size2){
size=size2;
for(int i=1;i<=size;i++) a[i]=a2[i];
}
bint(int x){
size=0;
while(x){
a[++size]=x%10;
x/=10;
}
}
void print() const{
if(!size) cout<<0;
for(int i=size;i>=1;i--) printf("%d",a[i]);
}
bint operator*(const bint &x) const {
bint ans;ans.size=0;memset(ans.a,0,sizeof(ans.a));
for(int i=1;i<=size;i++){
for(int j=1;j<=x.size;j++){
ans.a[i+j-1]+=a[i]*x.a[j];
}
}
for(int i=1;ans.a[i]!=0;i++){
ans.a[i+1]+=ans.a[i]/10;
ans.a[i]%=10;
ans.size++;
}
return ans;
}
bint operator+(const bint x) const{
bint ans;ans.size=0;memset(ans.a,0,sizeof(ans.a));
for(int i=1;i<=max(size,x.size);i++){
ans.a[i]=a[i]+x.a[i];
}
for(int i=1;ans.a[i]!=0;i++){
ans.a[i+1]+=ans.a[i]/10;
ans.a[i]%=10;
ans.size=i;
}
return ans;
}
bint max(bint x,bint y) const{
if(x.size<y.size) return y;
if(x.size>y.size) return x;
for(int i=1;i<=x.size;i++){
if(x.a[i]>y.a[i]) return x;
if(x.a[i]<y.a[i]) return y;
}
return x;
}
bint min(bint x,bint y) const{
if(x.size<y.size) return x;
if(x.size>y.size) return y;
for(int i=1;i<=x.size;i++){
if(x.a[i]>y.a[i]) return y;
if(x.a[i]<y.a[i]) return x;
}
return x;
}
bint operator-(const bint x) const {
int ans[N],size2=N-1;
memset(ans,0,sizeof(ans));
for(int i=1;i<=max(size,x.size);i++){
if(a[i]<x.a[i]) ans[i]+=a[i]-x.a[i]+10,ans[i+1]-=1;
else ans[i]+=a[i]-x.a[i];
}
while(true){
if(ans[size2]) break;
size2--;
}
return bint(ans,size2);
}
int max(int x,int y) const {
if(x>y) return x;
else return y;
}
bint(){
}
};
int n,k,m;
int p[100001];
int main(){
cin>>n>>k;
m=n;
for(int i=2;i*i<=m;i++){
while(m%i==0){
m/=i;
p[i]++;
}
}
if(m!=1) p[m]++;
for(int i=1;i<=n;i++) p[i]*=k;
bint a,b,ans=1;
for(int i=2;i<=n;i++){
a=1,b=1;
for(int j=1;j<=p[i];j++){
a=a*i;
b=b+a;
}
ans=ans*b;
}
ans.print();
return 0;
}
悬两关