Cod sursa(job #659472)

Utilizator alin.18Chedea Alin alin.18 Data 10 ianuarie 2012 17:49:11
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
# include <stdio.h>
#include<math.h>
int p[1000005],i,j,k,suma,prod,t,nr,z,q,nr1,s;
bool viz[1000005],ok;
long long int a,b,aux,x,n,y;
char ch;
int pow1(long long int a, long long int b)
{
long long int aux;
if (b==0) return 1;
else
if (b%2==0)
{
aux=pow1(a,b/2);
return (aux*aux);
}
else
return (a*pow1(a,b-1));
}
int main()
{
freopen("ssnd.in","r",stdin);
freopen("ssnd.out","w",stdout);
scanf("%d\n",&n);
k=0;
p[++k]=2;
for (i=3; i<=1000005; i+=2)
if (viz[i]==false)
{
p[++k]=i;

for (j=3*i; j<=1000005; j+=2*i)
viz[j]=true;
}
for (t=1; t<=n; t++)
{
x=0;
scanf ("%c",&ch);
while (ch!='\n')
{
x*=10;
x+=ch-'0';
scanf ("%c",&ch);
}
ok=false;
i=1; suma=1; prod=1; s=x;
while (p[i]<=sqrt(x))
{
if (x%p[i]==0)
{
ok=true;
nr=1;
while (x%p[i]==0)
{
nr++;
x/=p[i];
}
prod=(prod*nr)%9973;
z=p[i]; q=nr;
y=pow1(z,q);
suma=(suma*((y-1)/(p[i]-1)))%9973;
}
i++;
}
if (x!=1)
{prod=(prod*2)%9973;
suma=(suma*((x*x-1)/(x-1)))%9973;}
printf("%d %d\n",prod,suma);
}
return 0;
}