#include <stdio.h>
#include <math.h>
int main(){
unsigned int ref = 0, m,divisoes = 0 , total = 0,flag = 2;
unsigned int soma =0;
while(ref < 9999999999999){
ref = (flag * 2)-1;
m = ceil(sqrt(ref));
while( m > 2){
if(ref % m == 0)
divisoes++;
m--;
}
if(divisoes == 0){
if( ref > 2000000) // limitador
break;
printf("%d \n",ref);
soma += ref;
total ++;
}
divisoes = 0;
flag ++;
}
// somando mais 2 , por que dois é o unico numero primo par.
soma +=2;
total++;
printf("Soma %d , Total de Primos %d",soma,total);
return 0;
}
答案 0 :(得分:1)
9999999999999
比unsigned int
(2 ^ 32 - 1)的最大值大一点。一个简单的解决方法是向所有文字添加ULL
后缀,并将unsigned int
切换为unsigned long long
。
答案 1 :(得分:0)
数值数据类型在内存中具有一定量的存储空间,在某个值overflow之后。
你可以把它想象成一辆汽车撞到太多里程后翻滚的里程表。您可以使用更大的data type,它可能会满足您的需求。在某些时候,数字变得足够大,你需要一个任意长度数的库。谷歌搜索'c ++ BigInteger'将为您带来良好的效果。
答案 2 :(得分:0)
int数据类型只能存储(2 ^ 32-1),你的数字大于...... 使用unsigned long可以存储长数字。 。 你也可以使用unsigned float或unsigned double作为大浮点值。