Pagini recente » Cod sursa (job #3227025) | Cod sursa (job #3277218) | Rating Octavian Aspru (oaspru) | Cod sursa (job #3255956) | Cod sursa (job #532042)
Cod sursa(job #532042)
#include <stdio.h>
#include <vector>
#include <bitset>
#include <string.h>
using namespace std;
const int MOD = 9973;
int primes[80000];
void calcNdivSdiv(long long n, int* nndiv, long long* ssdiv) {
int ndiv = 1;
long long sdiv = 1;
int div = 2, pos_div = 0;
int nr;
long long divPowNr;
while ((long long) div * div <= n) {
if (n%div == 0) {
nr = 1;
divPowNr = div;
n/=div;
while (n%div == 0) {
++nr;
divPowNr *= div;
n /= div;
}
if (nr) {
ndiv *= (nr + 1);
sdiv *= (divPowNr*div - 1) / (div-1);
}
}
pos_div++;
div = primes[pos_div];
}
if (n != 1) {
ndiv *= 2;
sdiv *= (n+1);
}
*nndiv = ndiv;
*ssdiv = sdiv;
}
void compute_primes(int n) {
int nprimes = 0;
char prim[1001001];
memset(prim, 1, sizeof(prim));
for(int i=2; i<=n; i++)
if(prim[i]) {
for(int j=2*i; j<=n; j+=i) prim[j] = 0;
primes[nprimes++] = i;
}
}
int main() {
freopen("ssnd.in", "r", stdin);
freopen("ssnd.out", "w", stdout);
int nrt;
scanf("%d", &nrt);
compute_primes(1001000);
while (nrt--) {
long long n;
scanf("%lld", &n);
long long sdiv;
int ndiv;
calcNdivSdiv(n, &ndiv, &sdiv);
printf("%d ", ndiv % MOD);
printf("%d\n", sdiv % MOD);
}
return 0;
}