Cod sursa(job #681255)

Utilizator d.andreiDiaconeasa Andrei d.andrei Data 16 februarie 2012 20:03:24
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <cstdio>

#define file_in "ssnd.in"
#define file_out "ssnd.out"

#define ll long long
#define mod 9973


int Q,d,e;
long long N,nrd,sumd;

int put(int A, int B){
	
	if (B==0)
		return 1;
	if (B%2==0){
		int X=put(A,B/2);
		return X*X;
	}
	else{
		int X=put(A,B/2);
		return X*X*A;
	}
}

int main(){
	
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &Q);
	
	while(Q--){
		
		scanf("%lld", &N);
		
		d=2;
		
		nrd=sumd=1;
		
		while(d*d<N){
			
			e=0;
			while(N%d==0){
				e++;
			    N/=d;
            }
			
			if (e>0){
				nrd*=(e+1);
				nrd%=mod;
				sumd*=((put(d,e+1)-1)/(d-1));
				sumd=%mod;
			}
			d++;
		}
		
		if (N!=1){
			nrd*=2;
			sumd*=((put(N,2)-1)/(N-1));
			}
	    printf("%lld %lld\n", nrd,sumd); 
	}
		
	return 0;
}