Cod sursa(job #527538)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 31 ianuarie 2011 20:28:52
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<stdio.h>
#include<math.h>
#define max 1000000
#define mod %9973

struct fact
{
	int x,y;
};

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

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


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);
		p=1;pp=1;
		
		for (j=1;(long long)a[j]*a[j]<=n;j++)
			if (n%a[j]==0)
			{
				p2=1;
				q=0;
				while (n%a[j]==0) 
					{
						n/=a[j];
						q++;
				}
				p*=(q+1);
				
				for (qq=1;qq<=q+1;qq++)
					p2*=a[j];
				
				pp=((long long)pp*((p2-1)/(a[j]-1)))mod;
			}
		if (n!=1)
		{
			p*=2;
			pp=((long long)pp*((long long)(n*n-1)/(n-1)))mod;
		}
		
		printf("%lld ",p);
		printf("%lld\n",pp);
	}
	return 0;
}