我正在为大学c ++作业编写代码。该程序应该打印斐波纳契序列的前5个素数。继续我到目前为止所拥有的。
#include <iostream>
#include <cmath>
using namespace std;
int fibonacci(int x){
int y=1, z=1, sum=0;
for(int a=1; a<=x;a++){
sum=(z+y);
z=y;
y=sum;
}
return sum;
}
bool isPrime(int x){
double z=x;
for(int y=2;y<=sqrt(z);y++){
if(x%y==0){
return false;
}
}
return true;
}
int main(){
int primes=0, check=0;
for(int x=1;x<=10;x++){
check=0;
while(primes<5 && check==0){
if(isPrime(fibonacci(x))){
cout<<fibonacci(x)<<endl;
primes++;
check=1;
}
}
}
return 0;
}
代码返回前3个斐波纳契素数,2,3和5.程序然后进入无限循环。确保isPrime函数返回true消除了无限循环,但显然不会产生所需的输出。 任何帮助将不胜感激。谢谢。
答案 0 :(得分:1)
你找到Fibonacci并检查它是否是素数的功能很好。为了提高效率,它们本来可以进行一些修改,但它们看起来还不错。问题在于main
内部正在运行的事情。你在那里做了太多不必要的变量和比较。
我研究了代码,现在似乎正在运行。请记住,我在课堂上,所以可能会有一些错误哈哈。
#include <iostream>
#include <cmath>
using namespace std;
int fibonacci(int x) {
int y = 1, z = 1, sum = 0;
for (int a = 1; a <= x; a++) {
sum = (z + y);
z = y;
y = sum;
}
return sum;
}
bool isPrime(int x) {
double z = x;
for (int y = 2; y <= sqrt(z); y++) {
if (x%y == 0) {
return false;
}
}
return true;
}
int main() {
int primes = 0, check = 0;
for (int x = 1; primes < 5; x++) {
if (isPrime(fibonacci(x)))
{
cout << fibonacci(x) << endl;
primes++;
}
}
system("PAUSE");
return 0;
}
我相信你的check
被置于不正确的位置并导致无限循环。