Cod sursa(job #956893)
| Utilizator | Data | 3 iunie 2013 23:46:29 | |
|---|---|---|---|
| Problema | Suma si numarul divizorilor | Scor | 70 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 1.26 kb |
#include <fstream>
using namespace std;
ifstream in ("ssnd.in");
ofstream out ("ssnd.out");
const int NR=1000006;
bool v[NR+1];
int p[500000],nr;
void ciur()
{
for(int i=2;i*i<=1000;i++)
{
if(v[i]==0)
for(int k=i*i;k<=NR;k+=i)
v[k]=1;
}
nr=1;
for(int i=2;i<=NR;i++)
{
if(v[i]==0)
{
p[nr]=i;
nr++;
}
}
}
int main()
{
long long n,x;
ciur();
in>>n;
for(int i=1;i<=n;i++)
{
in>>x;
long long ndiv=1,sdiv=1;
for(int k=1;p[k]*p[k]<=x;k++)
{
if(x%p[k]==0)
{
int a=1,t=1;
while(x%p[k]==0)
{
a++;
x/=p[k];
t*=p[k];
}
ndiv*=a;
if(ndiv>9973)
ndiv%=9973;
sdiv*=((t*p[k]-1)/(p[k]-1));
if(sdiv>9973)
sdiv%=9973;
}
}
if(x>1){
ndiv*=2;
sdiv*=(x*x-1)/(x-1);
}
out<<ndiv%9973<<" "<<sdiv%9973<<"\n";
}
return 0;
}
