Cod sursa(job #448882)

Utilizator ncbllrNegrii Costin ncbllr Data 4 mai 2010 22:06:46
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include<iostream.h>
#include<fstream.h>

int v[ 1002000 ];
int inv[ 10000 ];
void prim(long long n, int *primes, int &nr)
{ long long j=2,i ;
nr = 0;
	while(j * j <= n)
	{
			if( v [ j ] != 1) 
			{
				for(i = j;i * i <= n;i += j)      v [ i ] = 1;         
				primes[ ++nr ] = j;
			}
			
			j++;
    }  
}


int main()

{
	freopen("ssnd.in", "r", stdin);
    freopen("ssnd.out", "w", stdout);
	
	
	long long n;
	int prime[100000]; 
	int k, nr_prime, cazuri,p=1,s,q;
	prim(100000000000ll, prime, nr_prime);
	scanf("%d\n", &cazuri);
	while( cazuri )
	{
		p = 1; q = 1;
		scanf("%lld", &n);
		for (int i = 1; i <= nr_prime && n > 1; i ++)
		{
			k =0;
			while( n % prime[i] == 0) 
			{
				n = n / prime[i];
				k++;
			}
			p=p*(k+1);
			s = 1;
			for(int j=1;j<=k+1;j++)
	            s=(s*prime[i])%9973;
			s= (s +9972) %9973 ;
			q=(q*s) % 9973;
			int m;
			m = (prime[i] + 9972) %9973;
            q=q/m %9973;			
			
		}	
		if( n > 1)
			p=p*2;
		printf("%d  %d\n", p , q );
		--cazuri;
		
	}
	return 0;
}