#include <iostream> #include <cmath> using namespace std; //函数在调用之前必须先声明 bool prime(int n); int main() { int i; //设置一个死循环,当用户输入0的时候终止循环 while (true) { cout << "请输入一个数字,并按Enter。"; cin >> i; if (i == 0) { break; } if (prime(i)) { cout << i << " 是质数." << endl; } else { cout << i << " 不是质数。" << endl; } } system ("PAUSE"); return 0; } bool prime(int n) { int i; for (i = 2; i <= sqrt(n); i++) { if (n % i == 0) { return false; } } return true; }
程序是对的,我也用了DEV-CPP,可以通过。应该是你的编译器问题。
谢谢,我再试试。
4.9.9.2这个版本可以通过编译,4.9.8.0这个版本不行。老版本通过如下修改也可以通过编译(目前还不知道为什么?):i <= sqrt(n); ----〉i <= sqrt(double(n));
检查是不是在链接的时候没有链接相应的数学处理lib。
xiexie
for (i = 2; i <= sqrt(n); i++)
这个习惯不太好,因为每次循环都要计算sqrt(n),这个没必要的,
在for循环之前先把sqrt(n)赋给一个量,减少计算量。
4.9.9.2这个版本可以通过编译,4.9.8.0这个版本不行。老版本通过如下修改也可以通过编译(目前还不知道为什么?):i <= sqrt(n); ----〉i <= sqrt(double(n));
首先,用DEV-C++5.11(我的编译器版本)是可以通过编译的。你肯定用的是老版本。
其次,不论这个编译器版本的问题,你的判断素数程序也是错误的。要特判一下1这个数,因为1不是素数啊。。
加上这行:
if(n == 1) return false;