Cod sursa(job #527529)

Utilizator Eugen01Vasilescu Eugen Eugen01 Data 31 ianuarie 2011 20:15:39
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
#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+=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);
		nr=0;
		p=1;
		pp=1;
		
		for (j=1;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=(pp*((p2-1)/(a[j]-1)))mod;
				
				if (n==1) break;
			}
		if (n!=1)
		{
			p*=2;
			pp=(pp*((long long)(n*n-1)/(n-1)))mod;
		}
		
		printf("%lld ",p);
		printf("%lld\n",pp);
		
		if (i==2)
		{
			p++;
			p--;
		}
	}
	return 0;
}