Mai intai trebuie sa te autentifici.
Cod sursa(job #773463)
Utilizator | Data | 1 august 2012 18:53:10 | |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 0.65 kb |
#include<fstream>
#define MOD 9973
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long i,x,t,nr,e,sum,n;
int v[500000];
bool a[1000001];
void ciur()
{int i,j;
v[1]=2;
for(i=3;i<=1000;i=i+2)
if(a[i]==0)
for(j=i*i;j<=1000001;j=j+i)
a[j]=1;
nr=1;
for(i=3;i<=1000001;i=i+2)
if(a[i]==0)
++nr,v[nr]=i;
}
int main()
{f>>n;
ciur();
for(;n;--n)
{f>>x;
sum=nr=1;
for(i=1;v[i]*v[i]<=x;++i)
if(x%v[i]==0)
{e=1;
t=v[i];
while(x%v[i]==0)
{t*=v[i];
x/=v[i];
++e;
}
nr*=e;
sum*=((t-1)/(v[i]-1))%MOD;
}
if(x!=1)
{nr*=2;
sum*=(x*x-1)/(x-1)%MOD;
}
g<<nr<<' '<<sum%MOD<<'\n';
}
return 0;
}