Cod sursa(job #870203)

Utilizator mihai27Mihai Popescu mihai27 Data 2 februarie 2013 23:24:39
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<fstream>

struct abc
{
	int f,exp;
};

using namespace std;

ifstream in("ssnd.in");
ofstream out("ssnd.out");

int t,p,pr,e,i,nr,ok[1000001],a[100000];
long long l,sum,x,j;
abc power[100];

void ciur()
{
	i=3;
	while (i<=1000)
	{
		if (!ok[i])
			for (j=(long long)i*i;j<=1000000;j+=i)
				ok[j]=1;
		i+=2;
	}
	
	a[++nr]=2;
	for (i=3;i<=1000000;i+=2)
		if (!ok[i]) a[++nr]=i;
}

int main()
{
	ciur();
	in>>t;
	
	for (i=1;i<=t;i++)
	{
		in>>x;
		p=0;
		for (j=1;j<=nr;j++)
			if (x%a[j]==0)
			{
				e=0;
				while (x%a[j]==0)
				{
					x/=a[j];
					e++;
				}
				p++;
				power[p].f=a[j];
				power[p].exp=e;
				if (x==1) break;
			}
		if (x!=1)
		{
			p++;
			power[p].f=x;
			power[p].exp=1;
		}
		
		pr=1;
		sum=1;
		for (j=1;j<=p;j++)
		{
			pr=pr*(power[j].exp+1);
			
			l=1;
			for (e=1;e<=power[j].exp+1;e++)
				l=(long long)l*power[j].f;
			sum=((long long)sum*(l-1)/(power[j].f-1))%9973;
		}
		out<<pr<<' '<<sum<<'\n';
	}
}