Cod sursa(job #904196)

Utilizator PregatireONIAnamaria Cotirlea PregatireONI Data 3 martie 2013 21:21:00
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <stdio.h>
#include <math.h>

FILE *f,*s;

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

int v1[1000005],v2[1000005];

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