[英]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 內容,我將提出一個簡單的解決方案。
這個問題圍繞幾個階段展開。
代碼可以分解為幾個函數,使其更容易和更直觀。
#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.