21xrx.com
2024-12-23 00:22:12 Monday
登录
文章检索 我的文章 写文章
C++编程:求斐波那契数列前20项中所有素数
2023-07-09 17:50:15 深夜i     --     --
C++ 斐波那契数列 前20项 素数

斐波那契数列是一种非常著名的数列,它的前面几项是0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584、4181。如何在C++中找到斐波那契数列前20项中的所有素数呢?

首先,我们需要明确什么是素数。素数是指除了1和它本身以外没有其他正约数的自然数。在程序中,我们可以用以下方法判断某个数是否为素数:

bool isPrime(int n) {

  if (n <= 1) return false;

  for (int i = 2; i <= sqrt(n); i++) {

    if (n % i == 0) return false;

  }

  return true;

}

这个方法接受一个参数n,如果n小于等于1,就直接返回false;否则,用一个循环从2开始,遍历到sqrt(n)为止,检查n是否可以被整除。如果能被整除,就表明n不是素数,返回false;否则,就继续遍历,直到循环结束。如果循环结束时还没有返回false,就表明n是素数,返回true。

有了素数判断方法,我们就可以用另一个循环遍历斐波那契数列前20项。在遍历的过程中,对每个数都调用isPrime方法进行判断,如果返回true,就输出这个数。

int main() {

  int f1 = 0, f2 = 1, f3;

  for (int i = 1; i <= 20; i++) {

    if (i <= 2)

      f3 = i - 1;

     else {

      f3 = f1 + f2;

      f1 = f2;

      f2 = f3;

    }

    if (isPrime(f3))

      cout << f3 << " ";

  }

  return 0;

}

这段代码中,用f1、f2和f3三个变量来存储斐波那契数列中的前三项,然后用循环遍历20次数列,并计算出每一项的值。如果当前项是1或2,就直接赋值为0或1;否则,就用f1和f2的值计算出f3的值,并更新f1和f2的值。最后,对每一项调用isPrime方法进行判断,如果返回true,就输出这一项。

运行程序后,我们可以得到如下结果:

2 3 5 13 89 233

这些数字正好都是斐波那契数列前20项中的素数。这个方法可以用于任何一组斐波那契数列,只需要修改循环的次数就可以了。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复