Cod sursa(job #496281)

Utilizator adrian_manducadrian manduc adrian_manduc Data 28 octombrie 2010 12:06:21
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include<fstream>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
int n;
const int N=1<<20;
const int mod = 9973;
bool ciur[N];
int prim[N>>3];
void ciurul()
{
	int i,j;
	for(i=2; i*i<N; ++i)
		if (!ciur[i])
			for(j=i*i; j<N; j+=i)
				ciur[j]=true;
}
void rezolva(int x)
{
	int pt,pr=1,i,nd=1,r;
	for(i=1;prim[i]*prim[i]<=x; ++i)
		if (x%prim[i]==0)
		{
			pt=0;
			r=prim[i];
			while (x%prim[i]==0)
			{
				x=x/prim[i];
				r=r*prim[i];
				++pt;
			}
			nd=nd*(pt+1);
			r=r-1;
			pr*=r/(prim[i]-1);
			pr %= mod;
		}
	if (x>1)
	{
		nd=nd*2;
		pr=pr*(x+1)%mod;
	}
	g<<nd<<" "<<pr<<"\n";
}
int main()
{
	int i,nrp=0,a;
	f>>n;
	ciurul();
	for(i=2;i<N;++i)
		if (ciur[i]==0) prim[++nrp]=i;
	for(i=1; i<=n; ++i)
	{
		f>>a;
		rezolva(a);
	}
	return 0;
}