Se consideră o secvență de N
numere naturale nenule.
Cerința
Determinați numărul de divizori pentru fiecare număr din secvența dată.
Date de intrare
Fișierul de intrare nrdiv.in
conține pe prima linie numărul natural N
, care reprezintă numărul de valori din secvență. Pe următoarele N
linii se află cele N
numere naturale din secvență, câte un număr pe o linie.
Date de ieșire
Fișierul de ieșire nrdiv.out
va conține N
linii. Pe linia i
va fi scris numărul de divizori ai celui de-al i
-lea număr din secvență (considerând ordinea din fișierul de intrare).
Restricții și precizări
1 ≤ N ≤ 50
1 ≤ numerele din secvență ≤ 10
13
Exemplu
nrdiv.in
3 13 1 24
nrdiv.out
2 1 8
Explicație
13
are doi divizori (1
şi 13
)
1
are un divizor (1
)
24
are 8
divizori (1
, 2
, 3
, 4
, 6
, 8
, 12
, 24
).
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 nrdiv1:
#include <bits/stdc++.h>
using namespace std;
bitset<3300003> a;
int prime[1000000], k;
void Ciur(int n)
{
int i, j;
for (i = 3; i * i <= n; i += 2)
if (a[i] == 0)
for (j = i * i; j <= n; j = j + i + i)
a[j] = 1;
prime[1] = 2;
k = 1;
for (i = 3; i <= n; i += 2)
if (a[i] == 0) prime[++k] = i;
}
int NrDiv(long long n)
{
long long d = 2;
int i = 1, e, ans = 1;
while (n > 1 && d * d <= n)
{
e = 0;
while (n % d == 0)
{
e++;
n /= d;
}
if (e > 0) ans *= (e + 1);
d = prime[++i];
}
if (n > 1) ans *= 2;
return ans;
}
int main()
{
long long x;
int n;
Ciur(3200000);
ifstream fin("nrdiv.in");
ofstream fout("nrdiv.out");
fin >> n;
while (n--)
{
fin >> x;
fout << NrDiv(x) << "\n";
}
fout.close();
return 0;
}
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 #3218 nrdiv1
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3218 nrdiv1 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!