簡體   English   中英

C++ 程序在斐波那契數列中找到素數

[英]C++ program to find prime numbers in a fibonacci series

有人可以幫助我嗎? 這是一個 c++ 程序,我需要找到斐波那契數列的素數。 問題是在你輸入 n (斐波那契數列的數量)后,程序必須從中提取素數,然后,如果這些素數的總和是奇數,它必須顯示“A”和如果是偶數,它應該顯示“D”。 問題是我知道如何找到斐波那契數列和素數,但我無法合並它們。 而且我需要使代碼盡可能簡單有人可以幫助我嗎?

這是斐波那契數列:

#include <iostream>
#include <conio.h>
using namespace std;

int main(){
    int n, a = 1, b = 1, c;
    cin >> n;
    cout << a << endl;
    cout << b << endl;
    int i = 2;
    while (i < n)
    {
        c = a + b;
        cout << c << endl; 
        a = b; 
        b = c;   
        i++;
    }
    getch();
}

這個是素數:

#include<iostream>
#include<conio.h>
using namespace std;

int main(){

    int a, b = 1, r = 1, c = 0, x, m;
    cout << "please enter number :";
    cin >> a;
    while (b <= a) {
    m = a;
    x = b;
    while (x != 0) {
        r = m % x;
        m = x;
        x = r;
    }
    if (m == 1){
        c++;
        b++;
    }
    cout << c;
    getch();
}

我必須把它們放在一起,這樣我才能提取斐波那契中的素數,但我不知道如何。 而且,我需要它來顯示素數,但我的代碼顯示了有多少數是素數

一種解決方案可能是創建一個 function 來找到第n個斐波那契數,另一個 function 來測試一個數是否是素數,然后循環遍歷斐波那契數以找到素數

#include <iostream>

int fib(int n) { /* code */ }
bool is_prime(int n) { /* code */ }

int sum_of_prime_in_fib(int lim)
{
    int sum = 0;

    // loop over the fibonacci number to sum the primes
    for (int i = 1; i <= lim; ++i) {
        int f = fib(i);
        if (is_prime(f))
            sum += f;
    }
    return sum;
}

int main()
{
    int n;
    std::cout << "please enter number :";
    std::cin >> n; //remember to check for errors, which I wont do

    std::cout << "the sum of primes is: " << sum_of_prime_in_fib(n) << "\n";
} 

我將這兩個功能的實現留作練習

由於您沒有包含 conio.h 內容,我將提出一個簡單的解決方案。

這個問題圍繞幾個階段展開。

  1. 獲取列表中的所有斐波那契數列
  2. 使用斐波那契數列查找是否存在任何素數(將它們放入列表中)
  3. 計算該列表中素數的總和
  4. 如果總和是偶數,則打印“A”,否則打印“D”。

代碼可以分解為幾個函數,使其更容易和更直觀。

#include <iostream>
#include <conio.h>
#include <vector>
using namespace std;


vector<int> generate_fibonacci(int n){
    int a = 1, b = 1, c;
    //cout << a << endl;
    //cout << b << endl;
    int i = 2; 
    vector<int> f;
    f.push_back(a);
    f.push_back(b);//assuming that the a,b are part of the fibonacci
    
    while (i < n)
    {
        c = a + b;
        f.push_back(c);
        a = b; 
        b = c;   
        i++;
    }
    return f;
}

bool is_prime(int n)
{
    // Corner case
    if (n <= 1)
        return false;
 
    // Check from 2 to n-1
    for (int i = 2; i < n; i++)
        if (n % i == 0)
            return false;
 
    return true;
}

vector<int> find_prime_from_f(vector<int> v){
    vector<int> fp;
    for(int i: v){
        if(is_prime(i))
        {
            fp.push_back(i);
        }
    }
    return fp;
}

int main(){
    cout << "please enter the number of fibonacci" << endl;
    int n;
    cin >> n;
    vector<int> fibonacciNumber = generate_fibonacci(n);
    vector<int> fibonacciPrime = find_prime_from_f(fibonacciNumber);
    int sum;
    for(int i: fibonacciPrime)
    {
        sum += i;
    }
    if(sum %2 != 0) cout << "A" <<endl; //if it is odd
    else cout << "D" <<endl; //if it is even
    
}

您當然可以定制這些函數的一些細節,包括為負數添加一些邊界檢查,並通過使用數組優化算法,進行計算和即時檢查,或者稍微簡化代碼。 但是,這應該作為您進一步實施的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM