Cod sursa(job #406774)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 1 martie 2010 19:47:43
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>

#define file_in "ssnd.in"
#define file_out "ssnd.out"

#define Mod 9973



int T,N,i,inv[1000000],e,d,nrd,suma,p,n;

int my_pow(int a,int b)
{
    int t;
    
    if (!b) 
		return 1;
    t=my_pow(a,b>>1);
    t=(t*t)%Mod;
    if (b&1)
		t=(t*a)%Mod;
    return t;
}


int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	
	scanf("%d", &T);
	
	for (i=1;i<Mod;++i)
        inv[i]=my_pow(i,Mod-2);

	
	while(T--)
	{
		scanf("%d", &N);
		nrd=suma=1;
		
		n=N;
		for (i=2;i*i<=N;++i)
		{
			if (N%i!=0)
				continue;
			
			e=0;
			int ee=1;
			while(n%i==0)
			{
				n/=i;
				e++;
				ee*=i;
			}
			
			nrd*=(e+1);
			suma*=((ee*i-1)%Mod);
			suma%=Mod;
			suma*=inv[i-1];
			suma%=Mod;
		}
		
		if (n>1)
		{
			nrd*=2;
			suma*=((n*n-1)%Mod);
		    suma%=Mod;
			suma*=inv[n-1];
			suma%=Mod;
		}
		
		printf("%d %d\n", nrd,suma);

	}
	
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}