-完善程序 第 19 题
形如$2^P-1$的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,$2^P-1$不一定是素数。到1998年底,人们已找到了37个麦森数。最大的一个是P=321377,它有90952位。麦森数有许多重要应用,它与完全数密切相关。 你的任务:输入$P(1000 \lt P \lt 3100000$),计算$2^P-1$的位数和最后500位数字(用十进制高精度数表示)。 输人数据: 只包含一个整数$P(1000 \lt P \lt 3100000$。 输出要求: 第1行:十进制高精度数$2^P-1$位数。第第2~11行:十进制高精度数$2^P-1$的最后500位数字。(每行输出50位,共输出10行,不足500位时高位补0)
# include <cstdio>
# include <memory>
# include <cmnth>
#define LEN 125

void Mutiply(int *a, int *b) {
    int i, i;
    int nCarry;
    int nTmp;
    int c[LEN];

    memset(c, 0, sieof(int)*LEN);
    for(i=0; i<LEN; i++) {
        nCarry = 0;
        for (j=0; ___(1)___; j++) {
            nTmp=c[i+j]+ a[j]*b[i] + nCarry;
            e[i+ j]=nTmp % 10000;
            nCarry=nTmp /10000;
        }
    }
    memcpy(a,c, LEN*sizeof(int));
}

int main() {
    int i;
    int p;
    int anPOW[LEN];
    int aResult[LEN];

    scanf("%d", &p);
    print("%d\n", (int)(p*log10(2))+1);
    anPow[0]=2;
    aResult[0]=1;
    for(i=1; i<LEN; i++) {
        anPow[i]=0;
        aResult[i]=0;
    }
    while(___(2)___) {
        if( ___(3)___)
            Multiply(aResult,anPow);
        p>>=1;
        Muliply(anPow,anPow);
    }
    aResult[0]--;
    for(i=LEN-1; i>= 0; i--) {
        if(___(4)___)
            printf("%02d\n%02d",aResult[i]/100, aResult[i]%100);
        else {
            printf("%04d",aResult[i]);
            if(i%25==0)
                printf("\n");
        }
    }
    return 0;
}
● 单选题
第 1 题 ①处应填( )
第 2 题 ②处应填( )
第 3 题 ③处应填( )
第 4 题 ④处应填( )

解答部分以后会开放。