我的代码不能处理大数

My code doesnt work for big numbers

本文关键字:处理 不能 代码 我的      更新时间:2023-10-16

看,上面的代码是用于计算2000000以下质数的总和,但它没有给出正确的答案,但当我试图将10或20以下的质数求和时,它给出了正确的答案,谁能帮助我发现发生了什么?

#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;

}

9999999999999unsigned int的最大值(2^32 - 1)大很多。一个简单的修复方法是在所有的文字后面加上ULL后缀,并将unsigned int改为unsigned long long

数值型数据类型在内存中有一定的存储空间可以使用,在达到某个值后它们会溢出。

你可以把它想象成一辆汽车在行驶了太多英里后翻车的里程表。您可以使用更大的数据类型,它可能会支持您的需求。当数字变得足够大时,你需要一个库来处理任意长度的数字。在谷歌上搜索"c++ BigInteger"会得到很好的结果。

int数据类型只能存储(2^32-1),而您的数字大于此…使用unsigned long来存储长数字。.对于大的浮点值,也可以使用unsigned float或unsigned double。