C++ 中的質數和斐波那契數


在本例題中,會給出一個數字 n。我們的任務是輸出小於或等於 n 的所有質數和斐波那契數。

讓我們透過一個示例來理解此例題

Input: n = 30
Output: 2 3 5 13

說明

小於 30 的斐波那契數:1 1 2 3 5 8 13 21。

在這些數字中,質數是 2 3 5 13。

要解決此例題,我們必須檢查小於 n 的所有斐波那契數列中的數字是否是質數。

為此,我們將找出小於或等於 n 的所有質數。並檢查生成的數字是否包含在斐波那契數列中。

如果一個數字在斐波那契數列中,那麼它的形式為 5i2 + 4 或 5i2 - 4。

顯示我們解決方案實現的程式,

示例

 線上演示

#include <bits/stdc++.h>
using namespace std;
bool isSquare(int n) {
   int sr = sqrt(n);
   return (sr * sr == n);
}
void printPrimeAndFibnacciNumbers(int n) {
   bool primeNumbers[n + 1];
   memset(primeNumbers, true, sizeof(primeNumbers));
   for (int p = 2; p * p <= n; p++) {
      if (primeNumbers[p] == true) {
         for (int i = p * 2; i <= n; i += p)
            primeNumbers[i] = false;
      }
   }
   for (int i=2; i<=n; i++)
   if (primeNumbers[i] && (isSquare(5*i*i+4) > 0 || isSquare(5*i*i-4) > 0))
      cout<<i<<"\t";
}
int main() {
   int N = 50;
   cout<<"All prime Fibonacci numbers less than "<<N<<" are :\n";
   printPrimeAndFibnacciNumbers(N);
   return 0;
}

輸出

All prime Fibonacci numbers less than 50 are :
23513

更新日期:2020 年 02 月 03 日

717 次瀏覽

開啟職業生涯

完成課程以獲得認證

立即開始
廣告