我是一个编程新手(实际上在20年的间隙后又回来了:).我正试图为一个关于E—mail的问题做一个程序,找出200万以下所有素数的总和. 我正在try 使用Eratosthenes筛算法. 我正在使用代码::块与GNU GCC编译器.
#include <stdio.h>
#define L 2000000
int main()
{
unsigned long long int i, j, n, num[L], sum = 0;
for (i = 0; i < L; i++)
num[i] = i + 1;
for (j = 2; j*j <=L; j++)
{
for (n = j; n*j<=L; n++)
{
num[n * j - 1] = 0;
}
}
for (i = 1; i < L; i++)
{
if (num[i] != 0)
{
printf("%llu\n",num[i]);
sum = sum + num[i];
}
}
printf("%llu\n", sum);
return 0;
}
该程序适用于所有低于1000000的L值,但超过100000时停止工作.我也收到了关于long long int的警告,如下所示:
***||=== Build file: Debug in 2MILLIONPRIMESUM (compiler: GNU GCC Compiler) ===|
***E:\Code Blocks Projects\2MILLIONPRIMESUM\main.c||In function 'main':|
E:\Code Blocks Projects\2MILLIONPRIMESUM\main.c|22|warning: unknown conversion type character 'l' in format [-Wformat=]|
E:\Code Blocks Projects\2MILLIONPRIMESUM\main.c|22|warning: too many arguments for format [-Wformat-extra-args]|******
当我try 使用"Long Double"等时,我得到了类似的警告.这是编译器的问题吗,它不能处理Long Long和Long Double?
上述代码在gdb在线编译器上运行时没有任何警告(仅限于L<;=1000000). 请大家就上述问题给我提意见. 提前谢谢你了.