#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define mod 1000000007
int main()
{
unsigned long long int n,i,j,k;
unsigned long long int *power = (unsigned long long int *)malloc(sizeof(unsigned long long int) * (1000000000LL));
power[0] = 1;
for(i = 1;i <= 1000000000LL;i++){
power[i] = (power[i-1] * 2 ) % mod;
}
int t;
scanf("%d",&t);
while(t--){
scanf("%lld",&n);
unsigned long long int f = 2;
for(i=2; i<=n;i++){
f = (f + power[i/2]) % mod;
}
printf("%llu\n",f);
}
return 0;
}
答案 0 :(得分:6)
肯定power[1000000000]
超出界限!你的数组没有那么多元素。您需要<
,而不是循环中的<=
。
答案 1 :(得分:4)
您应该检查malloc
是否已正确分配power
。
答案 2 :(得分:2)
因为您没有测试malloc的返回值。它通过给出NULL(例如,当内存不足时)而失败。
答案 3 :(得分:0)
这不是一个好主意
for(i = 1;i <= 1000000000LL;i++){
索引无论如何都是零基础,但您应该用<=
替换<
以防止读取数组的末尾
另外,考虑到您要分配的数组大小,您应该检查power
指针是否有效。