Cod sursa(job #603496)

Utilizator titusuTitus C titusu Data 16 iulie 2011 19:26:29
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <fstream>
#include <iostream>
//#define DEBUG
#define MOD 9973
using namespace std;

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

bool erat[1000005];
long long int prime[1000000], nrp;

int main(){
	for(int i=2;i*i<=1000000; ++i)
		if(erat[i]==0)
			for(int j=2 ; i*j<=1000000 ; ++j)
				erat[i*j]=1;
	nrp= 1;
	for(int i=2;i<=1000000;++i)
		if(erat[i]==0)
			prime[++nrp] = i;
	long long int n, x, s, nr;
	fin >> n ;
	for( ; n ; --n ){
		fin >> x;
		#ifdef DEBUG
			cout<<"x = " << x << endl;
		#endif
		s = nr = 1;
		long long int p , d = 2, termen ;
		while ( x > 1 ){
			p = 1; termen = 1;
			long long int stermen = 1;
			while ( x % prime[d] ==0 ){
				p ++, stermen = (stermen + ( termen = (termen * prime[d] ) % MOD ) ) % MOD, x /= prime[d];
			}
			nr = p * nr % MOD;
			s = (s * stermen) % MOD;
			#ifdef DEBUG
				//cout << nr << " " << s << endl;
			#endif
			d ++;
			if( x > 1 && prime[d]*prime[d] > x){
				nr  = (nr * 2) % MOD;
				s = s * (1+x) % MOD;
				#ifdef DEBUG
					//cout << x<< " " << nr << " " << s << endl;
				#endif
				x = 1;
			}
		}
		fout << nr << " " << s<< "\n";
	}
}