Cod sursa(job #1022056)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 4 noiembrie 2013 18:17:33
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<stdio.h>
int n,i,j,p[1000013],np,nr,nd,sd,q,t,z;
long long x,y;
bool k[1000013];
inline long long pow(int a, int b)
{
    if(b==0)return 1;
    long long x=a,y=1;
    while(b!=1)
        if(b%2==0) x=(x*x),b/=2;
        else y=(x*y),--b;
    return(x*y);
}
int main()
{
    freopen("ssnd.in","r",stdin);
    freopen("ssnd.out","w",stdout);
    scanf("%d",&n);
    for(i=2;i<=1000000;++i)k[i]=1;
    for(i=2;i*i<=1000000;++i)
        if(k[i])
		{
			p[np++]=i;
            for(j=i;i*j<=1000000;++j)k[i*j]=0;
		}
    for(i=1000;i<=1000000;++i)if(k[i])p[np++]=i;
    for(int w=0;w<n;++w)
    {
        scanf("%lld",&x);
        for(i=0,nd=sd=1;i<np && x!=1;++i)
        {
            nr=0;
            while(x%p[i]==0)x/=p[i],++nr;
            if(nr==0)continue;
            nd*=(nr+1);
            y=(long long)(pow(p[i],nr+1)-1)/(p[i]-1);
            sd=(sd*(y%9973))%9973;
        }
        if(x!=1)
        {
            nd<<=1;
            sd=(sd*((x+1)%9973))%9973;
        }
        printf("%d %d\n",nd,sd);
    }
    return 0;
}