Cod sursa(job #1411801)

Utilizator ArkinyStoica Alex Arkiny Data 31 martie 2015 22:37:23
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<iostream>
#include<stdio.h>
#include<math.h>
using namespace std;

#define MAX 1000010
long long a[1010][3],t;

long long n;

bool V[MAX];


int main()
{
	FILE *in,*out;
	in=fopen("ssnd.in","r");
	out=fopen("ssnd.out","w");
	fscanf(in,"%lld",&t);
	int i,j;
	for(i=1;i<=t;i++)
	{
		a[i][1]=a[i][2]=1;
	    fscanf(in,"%lld",&a[i][0]);
		if(a[i][0]==1)
			a[i][0]=-1;
	}
	for(i=2;i<=MAX;i++)
	{
		if(V[i]==0)
		{
			for(j=1;j<=t;j++)
		 	 if(a[j][0]>1)
			 {
				long long pr=1,nd=0;
				while(a[j][0]!=1 && a[j][0]%i==0)
				{
					nd++;
					pr=pr*i;
					a[j][0]=a[j][0]/i;
				
				}
				a[j][1]=a[j][1] * (nd+1);
				a[j][2]=(a[j][2]* (pr*i-1)/(i-1))%9973;
			 }
		    for(j=i;j<=MAX/i;j++)
			   V[i*j]=1;
		}
	}
	for(i=1;i<=t;i++)
	{
		if(a[i][0]>MAX)
			a[i][2]=(a[i][2] +a[i][0])%9973;

		fprintf(out,"%lld %lld \n",a[i][1],a[i][2]);
	}

	fclose(in);
	fclose(out);
	return 0;
}