c++ - 我的代码不适用于大数字

标签 c++ c math

看,上面的代码用于计算 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++ - 我的代码不适用于大数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23554997/

相关文章:

c++ - 如何添加和返回链表前面的节点

c++ - 如何将派生对象传递给 C++ 中的类?

c++ - googletest 中没有合适的默认构造函数 EXPECT_NO_THROW

c - 这是一个 gcc 错误吗?

algorithm - 预测数字相加的数字

javascript - 使用 d3js 绘制平行测量符号线

C++,当每个工作线程必须执行几个不同的任务时,如何为任务实现线程池

c - 如何在SDL中绘制圆、弧和 vector 图形?

c - 如何在不导致段错误的情况下更新 bst 结构中的字符指针?

algorithm - 寻找平截头体的最小包围球