用于检查使用大数字 C++ 时返回返回 0 的最大素因数的函数

Function to check for largest prime factor returning returning 0 when using large numbers c++

本文关键字:返回 函数 检查 数字 C++ 用于      更新时间:2023-10-16

这是欧拉项目中的第三个问题。我怀疑它只返回 0,因为我在初始化时将 0 分配给"returnum"变量。我的代码在较小的数字中工作正常,但它不适用于获得正确答案所需的大量 (600851475143)。

这是 int 的大小吗?如果是这样,我应该使用哪种数据类型?

这是我的代码:

int problem3(long int num) {
    long int returnum;
    for (int i = 2; i < num; ++i) {
        if (num % i == 0 && primecheck(i)) {
           returnum = i;
        }
    }
    return returnum;
}

这是我的"素数"功能:

bool primecheck(long int num) {
     for (int i = 2; i <= num / 2; ++i) {
         if (num % i == 0) {
            return false;
        }
    }
    return true;
}

编辑:我尝试更改数据类型,但是当我这样做时,它只是没有响应,显示一个空控制台几分钟,然后崩溃。

int

类型的变量的最大值为 2147483647,而 float 的最大值为 :3.40282e+38 或 0x1.fffffep+127。你也可以使用双倍。

long long problem3(long long num) {
long long returnum;
for (long long i = 2; i < num; ++i) {
    if (num % i == 0 && primecheck(i)) {
       returnum = i;
    }
}
return returnum;
}

这是我的"素数"功能:

bool primecheck(long long num) {
     for (long long i = 2; i <= num / 2; ++i) {
         if (num % i == 0) {
            return false;
        }
    }
    return true;
}

基本类型 (C++)

测试!还行!VS2017

#include "stdafx.h"
#include <stdio.h>
bool primecheck(long long num);
long long problem3(long long num);
bool primecheck(long long num) {
    for (long long i = 2; i <= num / 2; ++i) {
        if (num % i == 0) {
            return false;
        }
    }
    return true;
}
long long problem3(long long num) {
    long long returnum;
    for (long long i = 2; i < num; ++i) {
        if (num % i == 0 && primecheck(i)) {
            returnum = i;
        }
        if (i % 100000 == 0) {
            printf("tick - %lldn", i);
        }
    }
    return returnum;
}

int main()
{
    printf("out number %lldn", problem3(600851475143));
    return 0;
}

32 037 210 000 - 屏幕截图 10 000 000/秒 .(此刻>(长)2^32)你想要这个程序什么?等待 65K 秒?(18小时)可能需要使用数学算法来获得最佳时间?