Cod sursa(job #664489)

Utilizator sanzianaioneteIonete Sanziana sanzianaionete Data 20 ianuarie 2012 10:16:19
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.01 kb
# include <stdio.h>
#include<math.h>
int nrp[1000005],i,j,k=1,p,t,nr,s,m=9973,it;
bool prim[1000005],ok;
long long 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<=500001; i+=2)
		if (prim[i]==false)
		{
			k++;
			nrp[k]=i;
			j=3*i;
			while(j<=1000005)
			{
				prim[j]=true;
				j=j+2*i;
			}
		}
	for (it=1; it<=t; it++)
	{
		scanf ("%lld\n",&n);
		i=1; s=1; p=1;
		while (nrp[i]<=sqrt(n))
		{
			if (n%nrp[i]==0)
			{
				nr=1;
				while (n%nrp[i]==0)
				{
					nr++;
					n=n/nrp[i];
				}
				p=(p*nr)%m;
				s=(s*((putere(nrp[i],nr)-1)/(nrp[i]-1))%m)%m;
			}
			i++;
		}
		if (n>1)
		{
			p=(p*2)%m;
			s=(s*(n+1))%m;
		}
		printf("%d %d\n",p,s);
	}
	fclose(stdin);fclose(stdout);
	return 0;
}