我有一个特定的问题,我得到了一个名为 N 的 T 数字列表(T 是输入的第一行),我必须((2^N)-1)%(10^9+7)
为每个数字打印出来。以下限制适用:
1 ≤ T ≤ 100
1 ≤ N ≤ 100000000
我得到了低整数的正确答案,但不是高整数。我认为这与pow()
math.h 中的函数有关,但我不确定。
这是我的代码:
#include <stdio.h>
#include <math.h>
int main(void) {
unsigned int t, i;
long long unsigned int ans, n, m = 1000000007;
scanf("%u", &t);
for (i = 0; i < t; ++i) {
scanf("%llu", &n);
ans = ((long long unsigned int)pow(2,n)-1)%m;
printf("%llu\n", ans);
}
return 0;
}
所以基本上当我给我的程序这个输入时:
6
1
2
3
4
5
100000000
我得到输出:
1
3
7
15
31
582344007
我的输出的前 5 行是正确的,但我想在最后一行得到 494499947。
有关给出正确答案的 wolfram alpha 输出,请参见此处。
抱歉,如果我的问题微不足道,我仍在学习 C 的细节。