Informatică, întrebare adresată de andriesboss92, 9 ani în urmă

a) Scrieţi definiţia completă a unui subprogram primul, care
- primeşte prin singurul său parametru, a, o valoare naturală din intervalul [2,10000]
- returnează o valoare naturală reprezentând cel mai mic divizor al numărului a mai mare strict decât 1.
b) Fişierul text NUMERE.IN conţine pe prima linie un număr natural nenul n(1≤n≤100) şi pe următoarea linie n numere naturale din intervalul [2,10000] separate prin câte un spaţiu.
Un număr natural n se numeşte „aproape prim” dacă este egal cu produsul a două numere prime distincte. De exemplu, numărul 14 este „aproape prim” pentru că este egal cu produsul numerelor prime 2 şi 7.
Scrieţi un program C/C++ care determină, folosind apeluri utile ale suprogramului primul, cel mai mare număr „aproape prim” de pe linia a doua a fişierului NUMERE.IN. În cazul în care există un astfel de număr se afişează pe ecran mesajul DA, urmat de numărul determinat, iar în caz contrar mesajul NU.
Exemplu: dacă fişierul NUMERE.IN are conţinutul:
6
100 14 21 8 77 35
atunci se afişează pe ecran DA 77 pentru că numărul 77 este cel cel mai mare dintre numerele „aproape prime” din fişier (14=7*2,21=7*3,77=7*11, 35=7*5).

Răspunsuri la întrebare

Răspuns de blindseeker90
4
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int cel_mai_mic_divizor(int x){
int i,divizor=x;
for(i=2;i<sqrt(x);i++){
if(x%i==0){
divizor=i;
break;
}
}
return divizor;
}
int main(){
int n,max=0,x,div,div2;
ifstream fin("numere.in");
fin>>n;
while(n>0){
fin>>x;
div=cel_mai_mic_divizor(x);
div2=x/div;
if(div2>1&&div2==cel_mai_mic_divizor(div2)){
if(max<x){
max=x;
}
}
n--;
}
if(max==0){
cout<<"NU";
}
else{
cout<<"DA"<<" "<<max;
}

return 0;
}
Alte întrebări interesante