Cod sursa(job #904202)

Utilizator Anamaria20Cotirlea Anamaria Anamaria20 Data 3 martie 2013 21:38:56
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <stdio.h>

FILE *f,*s;

long long int i,j,k,m,n,p;

int v1[1000005],v2[1000005];

long long int pow(long long int a,long long int b, long long int c)
{
	long long int r;
	
	while(b!=0)
    {
        if(b%2==1)
            r=(r*a)%c;
 
        a=(a*a)%c;
 
        b=b/2;
    }
	
	return r;
}

int main()
{
	f=fopen("ssnd.in","r");
	s=fopen("ssnd.out","w");
	
	fscanf(f,"%lld",&n);
	
	v2[++v2[0]]=2;
	
	for(i=3;i<=1000000;i+=2)
	{
		if(v1[i]==0)
		{
			v2[++v2[0]]=i;
			
			for(j=i+i;j<=1000000;j+=i)
				v1[j]=1;
		}
	}
	
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%lld",&m);
		
		int nr=m;
		
		long long int nrd=1;
		long long int sum=1;
		
		for(j=1;v2[j]*v2[j]<=nr;j++)
		{
			p=0;
			while(nr%v2[j]==0)
			{
				p++;
				nr/=v2[j]; 
			}
			
			if(p!=0) 
			{
				nrd*=(p+1);
				//sum*=(pow(v2[j],p+1,9973)-1)/(v2[j]-1);
				//sum%=9973;
			}	
		}
		
		if(nr>1)
		{
			nrd*=2;
			//sum*=(pow(nr,2,9973)-1)/(nr-1);
			//sum%=9973;
		}
		
		fprintf(s,"%lld %lld\n",nrd,sum);
	}
	
	
	
	fclose(s);
	
	return 0;
}