Cod sursa(job #1017929)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 28 octombrie 2013 17:20:52
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<stdio.h>
int n,i,j,p[1000013],x,np,nr,nd,sd,q,t,z;
long long 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);
}
void invmod(int a, int b, int &x, int &y)
{
    int q,t;
    if(b==0)
    {
        x=1;
        y=0;
        return;
    }
    invmod(b,a%b,q,t);
    x=t;
    y=q-t*(a/b);
}
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])
		{
			for(j=i;i*j<=1000000;++j)k[i*j]=0;
			p[np++]=i;
		}
	for(int w=0;w<n;++w)
	{
		scanf("%d",&x);
		i=0;
		nd=1;
		sd=1;
		while(x!=1)
		{
			nr=0;
			while(x%p[i]==0){x/=p[i];++nr;}
			nd*=(nr+1);
			y=(long long)(pow(p[i],nr+1)-1)/(p[i]-1);
			sd=((long long)sd*y)%9973;
			++i;
		}
		printf("%d %d\n",nd,sd);
	}
	return 0;
}