听灌多
  • 板块灌水区
  • 楼主HarveyZ
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/19 23:08
  • 上次更新2024/10/20 09:55:57
查看原帖
听灌多
397312
HarveyZ楼主2024/10/19 23:08

本来打算写输入n,输出2n12^n-1的,但为啥变成了2n212^\frac{n}{2}-1

#include<bits/stdc++.h>
using namespace std;
struct bigint{//10:[0,1]
    unsigned long long d[1500];
};
const unsigned long long mod=1000000000;
bigint times(bigint a,bigint b){
    long long s=0;
    bigint ans={{0}};
    for(int i=0;i<1500;i++){
        for(int j=0;j<1500-i;j++){
            s=a.d[i]*b.d[j];
            ans.d[i+j]+=s%mod;
            ans.d[i+j+1]+=s/mod;
        }
    }
    for(int i=0;i<1500;i++){
        a.d[i+1] += a.d[i]/mod;
        a.d[i]%=mod;
    }
    return ans;
}
bigint ksm(bigint a,int b){
    bigint res={{1}};
    while(b){
        if(b&2) res=times(res,a);
        a=times(a,a);
        b>>=1;
    }
    return res;
}
void print(bigint a){
    for(int i=1499;i>=1;i--) if(a.d[i]!=0) cout<<a.d[i];
    cout<<a.d[0]-1;
}
int main(){
    int n;
    bigint two={{2}};
    cin>>n;
    print(ksm(two,n));
}
2024/10/19 23:08
加载中...