Cod sursa(job #527486)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 31 ianuarie 2011 19:24:58
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
#include<math.h>
#define max 1000000

struct fact
{
	int x,y;
};

int nr,m,i,j,ok[max],q,t,a[80000];
long long p,pp,n;
fact b[80000];

void ciur()
{
	for (i=3;i<=sqrt(max);i+=2)
		if (!ok[i])
			for (j=i*i;j<=max;j+=i)
				ok[j]=1;
	m=1;
	a[1]=2;
	
	for (i=3;i<=max;i+=2)
		if (!ok[i])
			a[++m]=i;
}


int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&t);
	
	ciur();
	
	for (i=1;i<=t;i++)
	{
		scanf("%lld",&n);
		nr=0;
		
		for (j=1;j<=sqrt(n);j++)
			if (n%a[j]==0)
			{
				q=0;
				while (n%a[j]==0) 
					{
						n/=a[j];
						q++;
				}
				nr++;
				b[nr].x=a[j];
				b[nr].y=q;
			}
		if (n!=1)
		{
			nr++;
			b[nr].x=n;
			b[nr].y=1;
		}
		p=1;
		for (j=1;j<=nr;j++)
			p*=(b[j].y+1);
		printf("%lld ",p);
		
		p=1;
		for (j=1;j<=nr;j++)
		{
			pp=1;
			for (q=1;q<=b[j].y+1;q++)
				pp*=b[j].x;
			p=(p*((pp-1)/(b[j].x-1)))%9973;
		}
		printf("%lld\n",p);
	}
	return 0;
}