Cod sursa(job #792120)
Utilizator | Pavel Ana-Oriana Pavel | Data | 26 septembrie 2012 15:46:27 |
---|---|---|---|
Problema | Suma si numarul divizorilor | Scor | 0 |
Compilator | c | Status | done |
Runda | Arhiva educationala | Marime | 1.11 kb |
#include <stdio.h>
char pr[1000001];
int p[100000];
void ciur()
{
int i,j,n=0;
for(i=2;i*i<=1000000;i++)
if(pr[i]==0)
{
for(j=i*i;j<=1000000;j+=i)
pr[j]=1;
}
n=0;
for(i=2;i<=1000000;i++)
if(pr[i]==0)
p[++n]=i;
}
int main()
{
FILE *f,*g;
f=fopen("ssnd.in","r");
g=fopen("ssnd.out","w");
int i,t,z,nr=1,pu;
long long n,s=1,e=1;
ciur();
fscanf(f,"%d",&t);
for(z=1;z<=t;z++)
{
fscanf(f,"%lld",&n);
nr=1;
s=1;
for(i=1;(long long)p[i]*p[i]<=n;i++)
if(n%p[i]==0)
{
e=0;
pu=1;
while(n%p[i]==0)
{
e++;
pu*=p[i];
n/=p[i];
}
nr=nr*(e+1);
s=s*(pu*p[i]-1)/(p[i]-1)%9973;
}
if(n!=1)
{
nr=nr*2;
s=s*(n+1)%9973;
}
fprintf(g,"%lld %lld\n",nr,s);
}
return 0;
}