题目描述
求\(2^P - 1\)的后五百位,且输出\(2^P - 1\)的位数,其中\(1000= 1;
}
4. 输出
for (int i = 0, k = 499; i < 10; i++) {
for (int j = 0; j < 50; j++, k--) {
if (k) printf("%d", res[k]);
else printf("%d", res[k] - 1);
}
puts("");
}
完整代码
#include
#include
#include
using namespace std;
const int N = 1000 + 10;
vector mul(vector &A, vector &B) {
vector C(N, 0);
for (int i = 0; i < 500; i++)
for (int j = 0; j < 500; j++)
C[i + j] += A[i] * B[j];
// printf("%d ", i + j);
for (int j = 0; j < 500; j++) {
C[j + 1] += C[j] / 10;
C[j] %= 10;
}
return C;
}
int main() {
int p;
scanf("%d", &p);
vector res(N, 0);
vector t(N, 0);
t[0] = 2; res[0] = 1;
printf("%d\n", (int)(p * log10(2)) + 1);
while (p) {
if (p & 1)
res = mul(res, t);
t = mul(t, t);
p >>= 1;
}
for (int i = 0, k = 499; i < 10; i++) {
for (int j = 0; j < 50; j++, k--) {
if (k) printf("%d", res[k]);
else printf("%d", res[k] - 1);
}
puts("");
}
return 0;
}
|