我基本上完成了这个,唯一的问题是当它循环检查素数时,它打印出不在Fibonacci序列中的素数。这是我的代码:
int main()
{
int no1,no2,newno,pno,i,terms,j;
no1 = 0;
no2 = 1;
printf("**Fibonacci and Prime Numbers**\n\n");
printf("Enter number of terms: \n");
scanf("%d", &terms);
printf("\nAmong the first %d terms of Fibonacci series that are also prime number: \n", terms);
for(i=0; i<terms; i++){
if(i<=no2){
newno = i;
}
else{
newno = no1+no2;
no1 = no2;
no2 = newno;
}
}
for(pno=2;pno<=newno;pno++){
for(j=2;j<=pno;j++){
if(pno%j==0){
break;
}
}
if(pno==j){
printf("%d \n", pno);
}
}
getch();
return 0;
}
我因为pno++
而猜测它,我是对的吗?
答案 0 :(得分:0)
试试这个
for(i=0; i<terms; i++){
newno = no1+no2;
no1 = no2;
no2 = newno;
for(j=2;j<=newno;j++){
if(newno%j==0){
break;
}
}
if(newno==j){
printf("%d prime\n", newno);
}
}
答案 1 :(得分:0)
这是因为您只检查最后一个号码。你应该检查你生成的每个数字。考虑创建功能,例is_prime
并检查您计算的每个斐波那契数。结果可能如下(取自C - how to test easily if it is prime-number?)
int is_prime(int num)
{
if (num <= 1) return 0;
if (num % 2 == 0 && num > 2) return 0;
for(int i = 3; i < num / 2; i+= 2)
{
if (num % i == 0)
return 0;
}
return 1;
}
你的主循环为每个数字调用is_prime
:
for (i = 0; i<terms; i++) {
if (i <= no2) {
newno = i;
}
else {
newno = no1 + no2;
no1 = no2;
no2 = newno;
if (is_prime(newno)) {
printf("%d\n", newno);
}
}
}
答案 2 :(得分:0)
这只是对你想要实现的目标的粗略尝试。
#include<stdio.h>
int main()
{
int no1,no2,newno,pno,i,terms,j;
no1 = 0;
no2 = 1;
printf("**Fibonacci and Prime Numbers**\n\n");
printf("Enter number of terms: \n");
scanf("%d", &terms);
printf("\nAmong the first %d terms of Fibonacci series that are also prime number: \n", terms);
for(i=0; i<terms; i++)
{
newno = no1+no2;
no1 = no2;
no2 = newno;
for(pno = 2; pno <= newno ;pno++)
{
if(pno == newno)
printf("%d\n",newno);
if(newno%pno == 0)
break;
}
}
return 0;
}
你只是试图只检查最后一个词而且检查方式不正确。 您使用的for循环
for(pno=2;pno<=newno;pno++){
for(j=2;j<=pno;j++){
if(pno%j==0){
break;
}
}
if(pno==j){
printf("%d \n", pno);
}
}
正在检查本地柜台pno
,这是没有任何意义的。
您可以使用更好的方式进一步优化您的程序,以查找数字是否为素数,因为大型输入需要花费大量时间。