Cod sursa(job #645563)

Utilizator blackbunny96Uriciuc Adrian blackbunny96 Data 9 decembrie 2011 22:08:42
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream.h>
#include <math.h>
//#include <bitset>
//const long MAX_N = 1000005;
const int MOD = 9973;

ifstream f("ssnd.in");
ofstream fout("ssnd.out");
long long N;

long long T, K, P[1000],viz[1000000];

void ciur() 
{ long long j,i;
  K=0;
  for(i=2; i<=1000000; i++)
		if(viz[i] == 0) 
	    {
		P[++K] = i;
		for(j = 2*i; j <=1000000; j =j+ i)
			viz[j] = 1;
		}
}

void solve() {


long long CT,p1=1,p2=1,p,i,nd = 1, sd = 1;
for( i = 1; i <= K && P[i] * P[i] <= T; i++)
{
	CT=T;
	if (CT % P[i]) continue;
	p = 0;
	while(CT % P[i] == 0) 
	{
	CT = CT/P[i];
	++p;
	}
	nd =nd* (p+1);
	//p1 = (long long)(pow(P[i], p+1) - 1) % 9973;
	//p2 = (long long) pow(P[i]-1, 9973-2) % 9973;
	p1=(pow(P[i], p+1) - 1);
	p2=p2*(P[i]-1);
	//sd = (((sd * p1) % 9973) * p2) % 9973;
	sd=(sd*p1)/p2;
}
/*if(N > 1) {
nd *= 2;
sd = (1LL*sd*(N+1) % MOD);
}*/
if(nd==1)
	fout<<2<<" "<<T+1;
else
	fout << nd << " " << sd % 9973 << "\n";
}
int main() {
	long long i;
f>>N;
	ciur();
for(i=1; i<=N;i++)
{
	f>>T;

    solve();
}
return 0;
}