Cod sursa(job #1311898)
| Utilizator | Data | 8 ianuarie 2015 18:35:29 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.07 kb |
#include<fstream>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout("ssnd.out");
long long i,j,a,s,x,nrd,pj;
int t,c;
long long pow(long long base, int expo)
{
long long p=1, a=base;
while(expo)
{
if(expo&1)
{
p*=a;
}
a*=a;
expo=(expo>>1);
}
return p;
}
int main()
{
fin>>t;
for(i=1;i<=t;i++)
{
fin>>a;
s=1;
nrd=1;
pj=2;
while(pj*pj<=a)
{
if(a%pj==0)
{
c=0;
while(a%pj==0)
{
c++;
a/=pj;
}
if(c)
{
x=pow(pj,c+1);
nrd*=(1+c);
s*=((x-1)/(pj-1));
}
}
pj++;
}
if(a>1)
{
nrd=(nrd<<1);
s*=(a+1);
//s%=9973;
}
fout<<nrd<<" "<<s%9973<<"\n";
}
return 0;
}
