Cod sursa(job #496505)

Utilizator joli94Apostol Adrian Alexandru joli94 Data 29 octombrie 2010 13:30:02
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include<cstdio>
const int N = 1<<20;
int p[N] ;
bool a[N] ; 


void init()
{
	for (int i=2 ; i<1000001 ; ++i )
	{
		if (!a[i])
		{
			p[++p[0]] = i; 
			for (int j=i+i ; j<1000001 ; j+=i )
				a[i] = true;
		}
	}
}

void calcul(long long int n)
{
	long long int s=1 , nr = 1 , pow , exp;
	for(int i=1 ; (long long)p[i]*p[i]<=n ; ++i)
	{
		if ( n%p[i]==0 )
		{
			pow = p[i] ;
			exp = 1;
			while ( n%p[i]==0 )
			{
				n/=p[i];
				pow*=p[i];
				++exp;
			}
			nr *= exp;
			s *= (pow-1)/(p[i]-1);
			s%=9973;
		}
	}
	if (n!=1)
	{
		nr *=2;
		s *= n+1; 
		s%=9973;
	}
	printf("%lld %lld\n" , nr , s );
}

int main()
{
	freopen ( "ssnd.in" , "r" , stdin ) ;
	freopen ( "ssnd.out" , "w"  , stdout ) ;
	
	int t;
	long long int n;
	
	scanf( "%d" , &t ) ;
	init();
	
	for (int i=1 ; i<=t ; ++i )
	{
		scanf ( "%lld" , &n ) ;
		calcul(n);
	}
	
	return 0;
}