Cod sursa(job #1224146)
Utilizator | Data | 29 august 2014 22:25:44 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 2.08 kb |
#include <fstream>
#define ll long long
#define MOD 9973
using namespace std;
int t,np,e[80000],nf;
ll p[80000],f[80000];
bool c[1000001];
void ciur()
{
p[0]=2;
for(int i=3;i<1000000;i+=2)
if(!c[i])
{
p[++np]=i;
if(i<1000)
for(int j=i*i;j<1000000;j+=i<<1)
c[j]=1;
}
}
ll pow(ll n,ll p)
{
ll sol=1;
while(p)
{
if(p&1)
sol*=n;
n*=n;
p=p>>1;
}
return sol;
}
int main()
{
ifstream fin("ssnd.in");
ofstream fout("ssnd.out");
ll n,i,s,nr;
ciur();
fin>>t;
while(t--)
{
fin>>n;
nf=-1;
for(i=0;i<=np && p[i]*p[i]<=n;++i)
if(!(n%p[i]))
{
f[++nf]=p[i];
e[nf]=0;
while(!(n%p[i]))
{
n/=p[i];
++e[nf];
}
}
if(n>1)
{
f[++nf]=n;
e[nf]=1;
}
nr=s=1;
for(i=0;i<=nf;++i)
{
nr*=e[i]+1;
s=(s*( (e[i]==1) ? (f[i]+1) : ((pow(f[i],e[i]+1)-1)/(f[i]-1)) ))% MOD;
}
fout<<nr<<" "<<s<<"\n";
}
return 0;
}