Hogy néz ki egy prímszám kiíró program c++ ban?
#include <iostream>
using namespace std;
int main()
{
int count;
for(int i = 2; i < 1000; i++)
{
if(count == 0)
std::cout << i-1 << " ";
count = 0;
for(int j = 2; j < i/2 + 1; j++)
{
if(i%j == 0)
count++;
}
}
}
Egyszerű megvalósítás,de kiírja a prímeket 1000-ig. Ha az első for-ban átrod az 1000-et másra,akkor addig fogja.
Ez a megoldás is jó, de azért ezt:
count = 0;
for(int j = 2; j < i/2 + 1; j++)
átírnám erre:
count = 0;
int q = (int)sqrt(i) + 1;
if(i%2 == 0)
{
++count;
}
else
{
for(int j = 3; j < q; j += 2){...}
}
elég a gyökéig elszámolni, és az nagy számoknál jóval kisebb, mint a szám fele. másfelől pedig lehet kettesével számolni, ha nem osztható 2-vel, ha pedig igen, akkor úgysem prím...
Én pedig inkább ilyenre írnám át:
#include <iostream>
using namespace std;
int main()
{
int count;
for(int i = 2; i < 1000; i++)
{
if(count == 0)
std::cout << i-1 << " " << endl;
count = 0;
for(int j = 2; j < i/2 + 1; j++)
{
if(i%j == 0)
count++;
}
}
system ("pause");
return 0;
}
lazán kapcsolódik:
Hogyan lehet azt megírni C++-ban, hogy számolja meg a 2 és 1000 közötti prímszámokat. Tehát ne magukat a számokat sorolja fel, hanem csak a darabszámot (168 db) írja ki. Köszönöm! :)
1.Kiíratás helyett beleteszed egy egyelőre 1000 elemú tömbbe( vagy egy dinamikus tömbe),esetleg egy struktúrába).
és utólag megnézed hogy melyik az else nem 0 elemú index.
Ez egy kicsit túlbonyolítása a problémának, de miért ne?
2.A kiírató utasítás helyett teszel mellé egy változót amit növelsz,majd utólag kiíratod.
pl. így:
#include <iostream>
#include <vector>
#include <math.h>
#define MAX 1000
using namespace std;
vector<int> primes;
bool prime(int number){
int sq = sqrt(number) + 1;
for(int i = 0; i < primes.size() && primes[i] < sq; ++i){
if((number % primes[i]) == 0){
return false;
}
}
primes.push_back(number);
return true;
}
int main(int argc, char **argv) {
primes.push_back(2);
int counter = 1;
for(int i = 3; i < MAX; i += 2){
if(prime(i)){
++counter;
}
}
cout << counter << endl;
return 0;
}
Ha egy kicsit gondolkodtál volna gyorsan rájöhetnél.
#include <iostream>
#include <vector>
#include <math.h>
using namespace std;
vektor <long> primek;
bool prime(int number)
{
long darab =(long ) sqrt(number) + 1;
for(int i=2;i<primek.size()&& primek[i]<darab;i++)
{
if((number % primes[i]) == 0){
return false;
}
}
primek.push_back(number);
return true;
}
//idáig tök ugyanaz mint a felette lévő kód, csak átirtam a változókat, hogy ne simán copyzzam a kódot.
int main()
{
primes.push_back(2);
int counter = 1;
int tomb=new tomb[counter];
for(long i=1;counter=20;i++)
{
if( prime(i)==true && prime(i+14)==true)
{
tomb[i]=i;
counter++;
}
}
for(int j=0;j<counter;j++)
{
cout<<tomb[j]<<endl;
}
return 0;
}
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!