Cod sursa(job #1060990)

Utilizator federerUAIC-Padurariu-Cristian federer Data 18 decembrie 2013 23:51:08
Problema Suma si numarul divizorilor Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<fstream>
#include<bitset>
#define Nmax 2000005
#define mod 9973
using namespace std;

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

long p[Nmax];
long nrdiv = 1, j, i, sdiv, rez;
bitset<Nmax> viz;

void ciur()
{
	long ii;
	for (long i = 2; i < Nmax; ++i)
	{
		if (viz[i] == 0)
		{
			p[++j] = i;
			for (ii = 2 * i; ii < Nmax; ii += i)
				viz[ii] = 1;
		}
	}
}

void putere(long b, long e)
{
	while (e)
	{
		if (e % 2 == 0)
		{
			b = (b*b)%mod;
			e /= 2;
		}
		else
		{
			rez = (rez*b)%mod;
			e--;
		}
	}
}
void div(long X)
{
	int c=0;
	nrdiv = 1;
	sdiv = i=1;
	while (X>1)
	{
		c = 0;
		while (X%p[i] == 0)
		{
			c++;
			X /= p[i];
		}
		if (c > 0)
		{
			rez = 1;
			int d=1;
			for (j = 1; j <= c; ++j)
			{
				d =(d* p[i])%mod;
				rez = (rez + d)%mod;
			}
			sdiv = (sdiv*rez)%mod;
			nrdiv *= (c + 1);
		}
		i++;
	}
}

int main()
{
	int T, N, k;
	ciur();
	fin >> T;
	for (k = 1; k <= T; ++k)
	{
		fin >> N;
		div(N);
		fout << nrdiv << ' '<< sdiv<<'\n';
	}

	return 0;
}