#include
using namespace std;
int n,i,x,nr,r,d,cmm,mini;
int main()
{
cin>>n;
cmm=1;
mini=99999;
for(i=1;i<=n;i++)
{
cin>>x;
r=x;
for(d=2;d*d<=x;d++)
{
if(r%d==0)
{
nr++;
while(r%d==0)
r=r/d;
}
}
if(nr>cmm)
{
cmm=nr;
if(x
mini=x;
}
}cout<
return 0;
}
Cerinţa
Să se scrie un program care citește un șir de n numere naturale şi determină numărul din şir care are număr maxim de factori primi.
Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule, separate prin spaţii.
Date de ieşire
Programul afișează pe ecran numărul x, numărul din şir cu număr maxim de factori primi.
Restricţii şi precizări
0 < n < 1001
cele n numere citite vor fi mai mici decât 2.000.000.000
dacă în şir există mai multe numere cu număr maxim de factori primi, se va fişa cel mic dintre acestea
Exemplu
Intrare
5
72 30 12 75 17
Ieșire
30
Explicație
30 are trei factori primi. Celelalte numere au mai puţini factori primi.
Ce am gresit?? Imi da 12 in loc de 30...
Răspunsuri la întrebare
#include <iostream>
using namespace std;
bool prim(int n)
{
if (n==0 || n==1) return false;
if (n==2) return true;
if (n>2)
{
if (n%2==0) return false;
else
{
for (int i=3; i*i<=n; i+=2)
if (n%i==0) return false;
}
return true;
}
}
int nrDivPrimi(int m)
{
int contor=0, j;
for (j=1; j*j<m; ++j)
{
if (m%j==0)
{
if (prim(j)) ++contor;
if (prim(m/j)) ++contor;
}
}
if (j*j==m && prim(j)) ++contor;
return contor;
}
int main()
{
int n, i, num, nrdiv;
cin >> n;
cin >> num;
int nrmax=nrDivPrimi(num);
int x=num;
for (i=2; i<=n; ++i)
{
cin >> num;
nrdiv=nrDivPrimi(num);
if (nrdiv>nrmax)
{
nrmax=nrdiv; x=num;
}
else
{
if (nrdiv==nrmax && num<x) x=num;
}
}
cout << x;
return 0;
}