Aktualisiert als Rolland erwähnt, ich bearbeitet, so dass sqrt nur einmal berechnet wird, und oh 1 ist mir nicht prim, dumm
prüfen prime
#include <math.h>
bool isPrime(int n)
{
if (n <= 1) return false;
if (n == 2 || n == 3) return true;
int checkRange = sqrt(n);
for (int i = 2; i <= checkRange; i++)
{
if (n % i == 0)
return false;
}
return true;
}
Sie speichern sie dann in einer Sammlung und verwenden sie eine andere Schleife es
#include <vector> //Include this - vector is a standard c++ container
//Declare in your function
std::vector<int> primes;
//In your code where you get your next fibbonacci
if (isPrime(next))
primes.push_back(next);
//After you finished looping for fibbonacci
cout << endl << "Prime numbers are" << endl;
for (int i = 0; i < primes.size(); i++)
cout << primes[i] << " ";
aktualisieren auszudrucken als OP angefordert: Fullcode, kein Vektor
Hinweis: Wenn Sie die Primzahlen extrahieren, um sie getrennt mit den Fibbonacci auszugeben, müssen Sie sie irgendwo aufbewahren. Da du keinen Vektor verwendest, werde ich das mit Array implementieren.
Das Problem mit Array ist, Sie müssen sie mit einer Größe deklarieren, aber Sie wissen nicht, wie viele Primzahlen Sie in dem Moment erhalten, wenn Sie es noch deklarieren. So finden Sie das Array mit der Größe groß genug erklären müssen alle Primzahlen in Ihrem Fibbonacci
#include <iostream>
#include <math.h>
#define MAX 100
using namespace std;
bool isPrime(int n)
{
if (n <= 1) return false;
if (n == 2 || n == 3) return true;
int checkRange = sqrt(n);
for (int i = 2; i <= checkRange; i++)
{
if (n % i == 0)
return false;
}
return true;
}
void main()
{
int n, c, first = 0, second = 1, next, primeCount = 0;
int primes[MAX];
cout << "Enter the number of terms of Fibonacci series you want" << endl;
cin >> n;
cout << "First " << n << " terms of Fibonacci series are :- " << endl;
for (c = 0; c < n; c++)
{
if (c <= 1)
next = c;
else
{
next = first + second;
first = second;
second = next;
}
cout << next << endl;
if (isPrime(next)) //Reuse the above isPrime
{
primes[primeCount] = next;
primeCount++;
}
}
for (c = 0; c < primeCount; c++)
cout << primes[c] << " ";
}
1 keine Primzahl enthalten, und 'sqrt' dauert eine lange Zeit zu berechnen, so dass es nur sein sollte einmal gemacht. Ansonsten sehr nett. :) –
Danke @nmtuan .aber können wir es ohne den Vektor tun. Wäre besser, wenn Sie das komplette cpp-Programm zur Verfügung stellen. –
Wahrscheinlich würde man "i + = 2" bevorzugen, da es sinnlos ist zu überprüfen, ob die Zahl einen geraden Teiler hat – YakovL