Cod sursa(job #664476)

Utilizator sanzianaioneteIonete Sanziana sanzianaionete Data 20 ianuarie 2012 10:09:20
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
# include <stdio.h>
#include<math.h>
int nrp[1000001],i,j,k=1,prod,t,nr,nr1,s,m=9973,it;
bool prim[1000001],ok;
long long int a,b,aux,n;
char ch;
long long putere(int a,int b)
{
	long long aux;
	if (b==0)return 1;
	else
		if(b%2==0)
		{
			aux=putere(a,b/2);
			return (aux*aux);
		}
		else
			return (a*putere(a,b-1));
}
int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d\n",&t);
	nrp[k]=2;
	for (i=3; i<=500000; i+=2)
		if (prim[i]==false)
		{
			k++;
			nrp[k]=i;
			j=3*i;
			while(j<=1000000)
			{
				prim[j]=true;
				j=j+2*i;
			}
		}
	for (it=1; it<=t; it++)
	{
		scanf ("%lld\n",&n);
		i=1; s=1; prod=1;
		while (nrp[i]<=sqrt(n)&&n>1)
		{
			if (n%nrp[i]==0)
			{
				nr=1;
				while (n%nrp[i]==0)
				{
					nr++;
					n=n/nrp[i];
				}
				prod=(prod*nr)%m;
				s=s*((putere(nrp[i],nr)-1)/(nrp[i]-1))%m;
			}
			i++;
		}
		if (n>1)
		{
			prod=(prod*2)%m;
			s=(s*((n*n-1)/(n-1)))%m;
		}
		printf("%d %d\n",prod,s);
	}
	fclose(stdin);fclose(stdout);
	return 0;
}