检查Fibonacci Prime的术语数量

时间:2017-10-10 04:49:33

标签: c codeblocks fibonacci

我基本上完成了这个,唯一的问题是当它循环检查素数时,它打印出不在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++而猜测它,我是对的吗?

3 个答案:

答案 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,这是没有任何意义的。

您可以使用更好的方式进一步优化您的程序,以查找数字是否为素数,因为大型输入需要花费大量时间。

相关问题