【问题标题】:Check for Fibonacci Prime in the amount of terms检查 Fibonacci Prime 的条款数量
【发布时间】:2017-10-10 04:49:32
【问题描述】:

我基本上完成了这个,唯一的问题是当它循环检查素数时,它也会打印出不在斐波那契数列中的素数。这是我的代码:

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++ ,对吗?

【问题讨论】:

    标签: c codeblocks fibonacci


    【解决方案1】:

    试试这个

    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);
     }
    }
    

    【讨论】:

    • 我试过了,它不起作用,现在它要么打印一个数字,要么根本不打印数字。它只打印我们输入之前的数字(如果数字是素数和斐波那契)
    【解决方案2】:

    这是因为您只检查最后一个数字。您应该检查您生成的每个数字。考虑创建函数,例如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);
            }
        }
    }
    

    【讨论】:

    • 不使用函数是否可以做到这一点?因为我做了一个我使用函数的地方,它可以工作。所以我想知道是否可以在不使用函数的情况下这样做。
    • 当然可以,但在实际编程中,你会使用函数来解决它。
    【解决方案3】:

    这只是您想要达到的目标的粗略尝试。

     #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 进行检查,这没有任何意义。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 1970-01-01
      • 2015-04-21
      相关资源
      最近更新 更多