不是VIP会员,不能显示答案

题目解答

题目:
形如2^p-1的素数称为麦森数,这时P一定也是个素数。但反过来不一定,即如果P是个素数,2^p-1不一定是素数。到1998年底,人们已找到了37个麦森数。最大的一个是p=321377,它有90952位。麦森数有许多重要应用,它与完全数密切相关。

你的任务:输入P(1000<P<3100000),计算2^p-1的位数和最后500位数字(用十进制高精度数表示)。

输人数据:

只包含一个整数P(1000<P<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) ④处应填( )
考点:
分析:
解答:
评论:
老师: