找出200万以下所有素数的总和.为什么我的代码不起作用?

use*_*656 0 c primes numbers

它应该打印142,913,828,922,(而不是1179908154它是怎么做的......)什么是错的?

http://pastebin.com/gJL4cMxm#

#include <stdio.h>
#include <conio.h>
#include <math.h>

int main()
{
    int n=2000000;
    long long sum=0;
    int m;
    int i;
    for(i=2;i<n;i++)
    {
        for(m=2;m<=sqrt(i);m++)
        {
            if(i%m==0)
            {      
                break;
            }
        }
        if(m>sqrt(i))
            sum+=i;
    }
    printf("%d",sum);  
    getch();
}
Run Code Online (Sandbox Code Playgroud)

bar*_*nos 5

更改:

printf("%d",sum);
Run Code Online (Sandbox Code Playgroud)

至:

printf("%lld",sum);
Run Code Online (Sandbox Code Playgroud)

说明:

如果变量的大小sum是4个字节或更少,则在调用之前将4个字节的数据推入堆栈printf.

如果变量的大小sum是8个字节,则在调用之前将8个字节的数据推入堆栈printf.

之后,printf("%d"...)将尝试从堆栈中读取4个字节的数据.

long long在某些编译器(包括你的编译器)上类型的大小是8个字节,因此print("%d",sum)只打印"下半部分" sum,这显然是你视角中的错误值(除非sum<2 ^ 32).