社区讨论

求教大佬,我的程序为什么会出错,怎么该啊?

P1045[NOIP 2003 普及组] 麦森数参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6v05rq
此快照首次捕获于
2025/11/20 11:16
4 个月前
此快照最后确认于
2025/11/20 11:16
4 个月前
查看原帖
CPP
#include <iostream>
#include <queue>
#include <cstring>
#include <cmath>
using namespace std;
void mul(int a[],int b[]){
    int ans[1001];
    memset(ans,0, sizeof(ans));
    for(register int i = 1;i<=500;i++)
        for(register int j = 1;j<=500;j++)
            ans[i+j-1] += a[i]*b[j];
    for(int i = 1;i<=500;i++){
        ans[i+1]+=ans[i]/10;
        ans[i]%=10;
    }
    for(int i = 1;i<=500;i++)a[i] = ans[i];
}
int main() {
    int p;
    cin>>p;
    cout<<ceil(log10(2)*p)<<endl;
    int a[501];
    int c[501];
    memset(a,0,sizeof(a));
    memset(c,0,sizeof(c));
    a[1] = c[1] = 2;
    while(p>=1){
        if(p==1){
            mul(a,c);
            break;
        }
        if(p%2==1)mul(a,c);
        p=p>>1;
        mul(a,a);
    }

    for(int i = 500;i>=1;i--)cout<<a[i];
    return 0;
}
mul是做乘法的函数,c数组是储存值2,我的思路是当遇到奇数次幂,就p-1,然后乘2,偶数次幂就直接平方然后除以2.
谢谢大佬orz

回复

1 条回复,欢迎继续交流。

正在加载回复...