Pagini recente » Cod sursa (job #2652518) | Cod sursa (job #831086) | Cod sursa (job #2686999) | Cod sursa (job #249395) | Cod sursa (job #2516578)
#include <bits/stdc++.h>
#define Mod 9973
using namespace std;
ifstream in("ssnd.in");
ofstream out("ssnd.out");
int t;
int prim[20001];
bitset <100001> ciur;
unsigned long long n,nrDiv,sumDiv;
int fact[101],numFact[101],all;
void findPrimes(int x)
{
int poz=0;
for(int i=2;i<=x;i++)
if(!ciur[i])
{
prim[++poz]=i;
for(int j=i*2;j<=x;j+=i)
ciur[j]=1;
}
}
void factors(unsigned long long nr)
{
all=0;
int primMax=sqrt(nr);
for(int d=1;prim[d]<=primMax && nr!=1;d++)
if(nr%prim[d]==0)
{
fact[++all]=prim[d];
numFact[all]=0;
while(nr%prim[d]==0)
{
numFact[all]++;
nr/=prim[d];
}
}
if(nr!=1)
{
fact[++all]=nr;
numFact[all]=1;
}
}
unsigned long long POW(int x,int p)
{
unsigned long long s=1,add=x;
while(p)
{
if(p%2)s*=add;
p/=2;
if(p)add*=add;
}
return s;
}
int main()
{
in>>t;
findPrimes(100000);
while(t--)
{
in>>n;
factors(n);
sumDiv=1;
nrDiv=1;
for(int i=1;i<=all;i++)
{
nrDiv*=(numFact[i]+1);
sumDiv*=(POW(fact[i],numFact[i]+1)-1)/(fact[i]-1);
sumDiv%=Mod;
}
out<<nrDiv<<' '<<sumDiv<<'\n';
}
return 0;
}