Se numește număr 3-prim, un număr natural care se poate descompune în produs de cel mult 3 numere prime, nu neapărat distincte. Cunoscând numerele naturale n și k, construiți un șir format din primele n numere 3-prime. Ordinea numerelor în șir va fi stabilită astfel încât, extrăgând pe rând numerele din șir, începând cu primul număr și apoi câte un număr din k în k poziții, circular, să obținem în ordine crescătoare, șirul primelor n numere 3-prime. Parcurgerea circulară înseamnă că după elementul aflat în vector pe locul n, urmează elementul de pe locul 1.
Cerința
Cunoscând numerele n, k și c (c = 1 sau c = 2), se cere:
1. dacă c = 1, să se afișeze cel mai mare din cele n numere 3-prime.
2. dacă c = 2, să se construiască șirul de n numere care îndeplinește condiția din enunț.
Date de intrare
Fișierul de intrare numere23.in conţine pe prima linie, despărțite prin câte un spațiu, numerele naturale n, k și c, cu semnificaţia din enunţ.
Date de ieșire
Dacă c = 1, atunci pe prima linie a fişierului numere23.out va fi scris un singur număr ce reprezintă cel mai mare din cele n numere 3-prime. Dacă c = 2, atunci fişierul numere23.out va conţine despărțite prin câte un spațiu, șirul celor n numere 3-prime.
Restricții și precizări
0 < k < n ≤ 10000- numerotarea elementelor în vector se face de la
1
Exemplul 1:
numere23.in
5 3 2
numere23.out
2 6 4 3 5
Explicație
Primele cinci numere 3-prime sunt: 2, 3, 4, 5, și 6. Șirul de numere 2, 6, 4, 3, 5 parcurs din 3 în 3, va forma în ordine crescătoare șirul de numere inițial.
Exemplul 2:
numere23.in
10 4 2
numere23.out
2 11 10 5 3 8 7 9 4 6
Explicație
Primele 10 numere 3-prime sunt: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11. Șirul de numere 2, 11, 10, 5, 3, 8, 7, 9, 4, 6, parcurs din 4 în 4, va forma în ordine crescătoare șirul de numere inițial.
Exemplul 3:
numere23.in
5 3 1
numere23.out
6
Explicație
Primele cinci numere 3-prime sunt: 2, 3, 4, 5, și 6. Cel mai mare număr din acest șir este 6.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema numere23:
#include <fstream>
using namespace std;
ifstream fin("numere23.in");
ofstream fout("numere23.out");
long a[10001], b[10001], x, i, n, k;
int cer;
long urmatorul(long x);
int verif(long x);
int main()
{
fin>>n>>k>>cer;
x=2;
for(i=1;i<=n;i++)
{
a[i]=x;
x=urmatorul(x);
}
if(cer==1) ///cerinta 1
fout<<a[n]<<'\n';
else ///cerinta 2
{ ///plasez elem din a in b, parcurgand locurile libere din k in k
b[1]=a[1];
int p=1;
for(i=2; i<=n; )
{
int m=0; ///cate locuri libere am gasit
if(p==n)
p=1;
else
p++;
while(m<k) ///tb saparcurg pana la al k-lea loc liber
{
if(b[p]==0)
{
m++;
if(m==k)
{
b[p]=a[i++];m=0;
break;
}
}
p++;
if(p==n+1)
p=1;
}
}
for(i=1;i<=n;i++)
fout<<b[i]<<' ';
fout<<'\n';
}
return 0;
}
int verif(long x)
{
long nr=0,f=2;
while(x%f==0)
{
x/=f;
nr++;
if(nr>3)
return 0;
}
f=3;
while(x>=f)
{
while(x%f==0)
{
x/=f;
nr++;
}
if(nr>3) return 0;
f+=2;
}
return nr<=3;
}
long urmatorul(long x)
{
do
{
x++;
if(verif(x))
return x;
}while(1);
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa
.
Rezolvarea problemei #2351 numere23
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2351 numere23 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!