Cod sursa(job #603499)

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

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

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

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