【发布时间】:2014-06-07 17:31:43
【问题描述】:
当我尝试输入一个大数字(大约 1000 万)时,为什么会收到“命令终止”的消息?该程序显示该数字是否为质数。
见下面的代码:
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
int main ( int argc, char *argv[] )
{
unsigned long long number;
bool prime ( unsigned long long );
printf ("Enter a positive integer greater than 1: ");
scanf ("%llu", &number );
prime( number ) ?
printf ( "%llu is a prime.\n", number ):
printf ( "%llu is not a prime.\n", number);
return EXIT_SUCCESS;
}
bool prime ( unsigned long long number )
{
unsigned long long i, j;
bool isPrime[number + 1];
for ( i = 2; i <= number; i++ )
isPrime[i] = true;
for ( i = 2; i <= number - 1; i++ )
for ( j = 1; i*j <= number; j++ )
isPrime[i*j] = false;
return isPrime[number];
}
【问题讨论】:
-
行
bool isPrime[number + 1]编译没有错误? -
@barakmanos 它是 C,而不是 C++(C99 支持可变长度数组)
-
至少对我来说,是的。我正在使用 GCC。
-
@MarcoA:这对双方都有效!无论如何,1000 万个
bool数组可能没有足够的堆栈空间。 -
你的筹码可能要炸了
标签: c primes sieve-of-eratosthenes