Cod sursa(job #582306)

Utilizator gyeresihunorGyeresi Hunor gyeresihunor Data 15 aprilie 2011 10:43:05
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include "stdio.h"

long t[1001001];
long long x;
int nr;
int mnr=1;
int snr=1;
int y;
int i;
int n,z;
int j;
int ppw(int a, int x)
{
	if(x==1)return a;
	int c=ppw(a, x/2);
	if(x%2)return (((c*c)%9973)*a)%9973;
	return (c*c)%9973;
}

int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&n);
	for(z=1;z<=n;z++)
	{
		scanf("%lld",&x);
		mnr=1;
		snr=1;
		while(x>1)
		{
			nr=1;
			i=2;
			while(!(x%i))
			{
				nr++;
				x/=i;
			}
			mnr=( ((mnr*(ppw(i, nr)-1))%9973) * ppw(i-1,9971) )%9973;
			snr=(snr*nr)%9973;
			
			nr=1;
			i=3;
			while(!(x%i))
			{
				nr++;
				x/=i;
			}
			mnr=( ((mnr*(ppw(i, nr)-1))%9973) * ppw(i-1,9971) )%9973;
			snr=(snr*nr)%9973;

			for(j=6;j<=x;j+=6)
			{
				i=j-1;
				nr=1;
				while(!(x%i))
				{
					nr++;
					x/=i;
				}
				mnr=( ((mnr*(ppw(i, nr)-1))%9973) * ppw(i-1,9971) )%9973;
				snr=(snr*nr)%9973;
				
				i=j+1;
				nr=1;
				while(!(x%i))
				{
					nr++;
					x/=i;
				}
				mnr=( ((mnr*(ppw(i, nr)-1))%9973) * ppw(i-1,9971) )%9973;
				snr=(snr*nr)%9973;
			}
		}
		printf("%d %d\n",snr, mnr);
	}
	return 0;
}