Cod sursa(job #582325)

Utilizator gyeresihunorGyeresi Hunor gyeresihunor Data 15 aprilie 2011 11:09:57
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include "stdio.h"

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

int main()
{
	for(i=2;i<=1000000;i++)
	{
		for(j=2;j*i<=1000000;j++)
			p[i*j]=1;
		if(p[i-1]==0)
			prim[e++]=i-1;
	}
	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;
		for(j=1;j<e&&x>1;j++)
		{
			i=prim[j];
			nr=0;
			if(!(x%i))
			{
				while(!(x%i))
				{
					nr++;
					x/=i;
				}
			nr++;
			}
			if(nr)
			{
			mnr=( ((mnr*(ppw(i%9973, nr)-1))%9973) * ppw((i-1)%9973,9971) )%9973;
			snr=(snr*nr)%9973;
			}
		}
		if(x>1)
		{
			snr=(snr*2)%9973;
			mnr=( ((mnr*(ppw(x%9973, 2)-1))%9973) * ppw((x-1)%9973,9971) )%9973;
		}
			printf("%d %d\n",snr, mnr);
	}
	return 0;
}