Cod sursa(job #1014305)

Utilizator The_DisturbedBungiu Alexandru The_Disturbed Data 22 octombrie 2013 13:52:41
Problema Suma si numarul divizorilor Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<stdio.h>
#include<math.h>
int n,i,j,p[100013],np,y,nr;
long long x,nrd,sd;
bool k[1000013];
bool da;
inline int pow(int a, int b)
{
	if(b==0)return 1;
	long long x=a,y=1;
	while(b!=1)
		if(b%2==0) x=(x*x),b/=2;
		else y=(x*y),--b;
	return(x*y);
}
int main()
{
	freopen("ssnd.in","r",stdin);
	freopen("ssnd.out","w",stdout);
	scanf("%d",&n);
	for(i=2;i<1000000;++i)k[i]=1;
	for(i=2,np=0;i*i<1000000;++i)
		if(k[i])
		{
			j=i;
			while(i*j<1000000)
			{
				k[i*j]=0;
				++j;
			}
			p[np++]=i;
		}
	for(int q=0;q<n;++q)
	{
		scanf("%lld",&x);
		nrd=sd=1;
		y=(int)sqrt(x);
		i=0;
		while(x!=1)
		{
			nr=0;
			while(x%p[i]==0) x/=p[i],++nr;
			if(nr==0){++i;continue;}
			nrd*=(nr+1);
			sd=( sd * ( (pow (p[i],nr+1) -1) / (p[i]-1) ) )%9973;
			++i;
		}
		printf("%lld %lld\n",nrd,sd%9973);
	}
	return 0;
}