C++ első 200 összetett szám kiírását hogy kell megvalósítani?
Ez jó?
int main ()
{
int oszto;
for (int i=1; i<=200; i++)
{
oszto=0;
for (int j=1; j<i; j++)
{
if (i%j==0)
{
oszto++;
if (oszto==2)
{
cout<<i<<" ";
}
}
}
}
int numOfCompositeNumbers = 0;
for (int number = 4; numOfCompositeNumbers <= 200; number++)
{
for (int divider = 2; divider < number / 2 + 1; divider++)
{
if (number % divider == 0)
{
cout<<number<<" ";
numOfCompositeNumbers++;
break;
}
}
}
Picit felgyorsítva:
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int numOfCompositeNumbers = 0;
for (int number = 4; numOfCompositeNumbers <= 200; number++)
{
if (number % 2 == 0)
{
cout << number << " ";
numOfCompositeNumbers++;}
else
for (int divider = 3; divider < sqrt(number) + 1; divider +=2)
{
if (number % divider == 0)
{
cout << number << " ";
numOfCompositeNumbers++;
break;
}
}
}
system("PAUSE");
return 0;
}
Ha van kéznél olyan lib/framework, ami egy adott számról megmondja neked, hogy prím-e, avagy sem, akkor nyert ügyed van: Számolod, hányat írtál ki, a prímeket pedig átugrod (while ciklus, btw).
Csalásnak tűnhet, de a midnennapokban is "csalunk", különben soha nem készülnénk el semmivel.
C++ alá sajnos nem tudok hirtelen ilyet, de csak elbújt egy valahol, hiszen nem vagyunk mi olyan marhák, hogy százan, ezerszer megírjuk ugyanazt újra és újra. :)
Tanulási célból talán az volna a legjobb, ha mindkét irányt megközelítenéd:
A másik esetben is kvázi azt vizsgálod, hogy prím számmal van-e dolgod, azonban itt az egyes számokról saját kóddal döntöd el, hogy prímek-e (nem túl meglepő módon ezt prímtesztnek nevezik).
Ekkor vizsgálhatod például a többiek által már említett belső ciklussal (ha találsz osztót, kiírod a számot, és ugrasz a következőre).
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!