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!