0
#import <cmath>
#import <iostream>
using namespace std;

int main {
    int a;
    for(int x = 600851475142; x>cmath::sqrt(600851475143); x--) {
        if (600851475143%x==0) { //is it a factor of 600851475143?
            if p(x) { //is it also a prime?
                cout << x;
                return 0;
            }
        }
    }
}

bool p(int n) {
    for(int x = n; x<cmath::sqrt(n)+1; x++) {
        if (n%x==0) {
            return false;
        }
    }
    return true;
}

这是我的项目 euler #3 ( http://projecteuler.net/problem=3 ) 的代码。我对 C++ 比较陌生。

基本上我的方法是从 600851475143 开始倒数,测试这个数字是否是 600851475143 的因子,然后看看它是否是素数。如果是则返回号码并退出。但是,当我编译我的代码时,我得到了错误:

error: function definition does not declare parameters
In function 'bool p(int)':
error: 'cmath' has not been declared

任何帮助,将不胜感激

4

2 回答 2

2

查看您的代码,如果您对编程本身不熟悉,那么您似乎至少是 C++ 新手。

1) 在 C++ 中,我们使用 #include 而不是 #import

2)你需要在调用它之前声明一个函数。就像是:

bool p(int n);

在主函数之前

3) main 函数中缺少括号。应该是:'int main() {'

4) 对于 sqrt,您不需要 cmath::。写一些类似的东西: (int) sqrt((double)600851475143) 这是因为 sqrt 在参数中不接受整数

5) 'if p(x) {' 应该是 'if (p(x)) {'

6)函数中的for循环总是在增加。

7) 在 for 循环之前而不是在 for 循环中计算 sqrt 是个好主意。

8) 欢迎来到编程世界!

于 2013-04-20T18:25:37.037 回答
0

标头的名称是cmath,但sqrt在命名空间中std

另外:您可能希望在循环之前计算平方根,然后针对该结果进行测试:

bool p(int n) { 
    int limit = std::sqrt(n)+1;
    for (int x=n; x<limit; x++)
    // ...
}
于 2013-04-20T18:04:18.467 回答