Cod sursa(job #589922)

Utilizator tudorsTudor Siminic tudors Data 14 mai 2011 13:53:04
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <stdio.h>
#include <cmath>
#define N 1000001
using namespace std;
bool VIZ[N];
int P[100001],p;
int T;
long long A;
long long NR,SUMA;
FILE *f,*g;
void ciur()
{
	int i,d;
	for (i=2;i<=N;++i)
		if (!VIZ[i])
		{
			d=i;
			P[++p]=i;
			while (d<=N)
			{
				VIZ[d]=1;
				d+=i;
			}
		}
}
void nr_div_si_suma_div(long long nr)
{
	int d,put,x,q;
	SUMA=NR=1;
	d=1;
	q=int(sqrt(double(nr)));
	while (P[d]<=q)
	{
		if (nr%P[d]==0)
		{
			put=0;
			x=1;
			while (nr%P[d]==0)
			{
				put++;
				nr/=P[d];
				x*=P[d];
			}
			NR*=(put+1);
			x*=P[d];
			SUMA=SUMA*((((x-1)%9973)/((P[d]-1)%9973))%9973);
		}
		d++;
	}
	if (nr>1)
		SUMA=(SUMA+nr)%9973;		
	if (NR==1)
		NR=2;
	fprintf(g,"%lld ",NR);
	fprintf(g,"%lld",SUMA);
	fprintf(g,"\n");
}
void solve()
{
	int i;
	fscanf(f,"%d",&T);
	for (i=1;i<=T;++i)
	{
		fscanf(f,"%lld",&A);
		nr_div_si_suma_div(A);
	}
}
int main()
{
	f=fopen("ssnd.in","r");
	g=fopen("ssnd.out","w");
	ciur();
	solve();
	fclose(f);
	fclose(g);
	return 0;
}