Mai intai trebuie sa te autentifici.
Cod sursa(job #2756447)
Utilizator | Data | 31 mai 2021 20:03:22 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.2 kb |
#include <fstream>
using namespace std;
ifstream cin ( "ssnd.in" );
ofstream cout ( "ssnd.out" );
int nrprime[10000];
bool ciur[1000000];
int main() {
int i, poz, t, pozz_div, p;
long long d, n, nrdiv, sum, divmax;
poz = 0;
for ( i = 2; i < 1000000; i++ ) {
if ( ciur[i] == 0 ) {
nrprime[poz++] = i;
for ( d = (long long)i * i; d < 1000000; d += i )
ciur[d] = 1;
}
}
cin >> t;
for ( i = 1; i <= t; i++ ) {
nrdiv = 1;
sum = 1;
cin >> n;
pozz_div = 0;
while ( (long long)nrprime[pozz_div] * nrprime[pozz_div] < n ) {
d = nrprime[pozz_div];
p = 0;
divmax = 1;
while ( n % d == 0 ) {
divmax *= d;
n /= d;
p++;
}
nrdiv = ( nrdiv * ( ( p + 1 ) % 9973 ) ) % 9973;
sum = sum * ( ( ( divmax * d - 1 ) / ( d - 1 ) ) % 9973 ) % 9973;
pozz_div++;
}
if ( n > 1 ) {
nrdiv = ( nrdiv * 2 ) % 9773;
sum = sum * ( ( n * n - 1 ) / ( n - 1 ) % 9973 ) % 9973;
}
if ( nrdiv == 1 ) {
cout << nrdiv << " " << ( n + 1 ) % 9973;
}
else {
cout << nrdiv << " " << sum;
}
cout << "\n";
}
return 0;
}