Pagini recente » Cod sursa (job #2700254) | Cod sursa (job #1792596) | Cod sursa (job #2620236) | Cod sursa (job #59340) | Cod sursa (job #481075)
Cod sursa(job #481075)
#include <cstdio>
#include <cstdlib>
#include <stdint.h>
#include <string>
#include <math.h>
#define MODNR 9973
FILE *fin=fopen("ssnd.in","r");
FILE *fout=fopen("ssnd.out","w");
uint8_t bif[1000000];
int a[300000];
void ciur(int n)
{
memset(bif,1,n);
int nrprimes=0;
for (int i=2; i<n; i++)
{
if (!bif[i]) continue;
a[nrprimes++]=i;
for (int j=i*2; j<n; j+=i)
bif[j]=0;
}
a[nrprimes]=-1;
}
int put(int a, int b)
{
int p=1;
for (int i=(sizeof(int)*8-2); i>=0; i--)
{
p=p*p;
if (b&(1<<i))
p*=a;
}
return p;
}
int main (int argc, char * const argv[]) {
int t;
fscanf(fin, "%d", &t);
ciur(1000000);
for (int i=0; i<t; i++)
{
int n;
int s=1,nr=1;
fscanf(fin, "%d", &n);
int np=0,p;
p=a[np];
bool fallback=false;
while (p<=sqrt(n))
{
if (p==-1)
return -1;
long long put=p;
int f=0;
while (!(n%p))
{
f++;
n/=p;
put*=p;
//put%=MODNR;
}
nr*=f+1;
nr%=MODNR;
s=(s*((put-1)/(p-1)))%MODNR;
np++;
p=a[np];
}
if (n!=1)
{
s=(s*((n*n-1)/(n-1)))%MODNR;
nr=(nr<<1)%MODNR;
}
fprintf(fout, "%d %d\n",nr,s);
}
fclose(fin);
fclose(fout);
return 0;
}