Cod sursa(job #420302)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 18 martie 2010 18:57:34
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream.h>
#define ll long long
#define Max 1000005
#define Max2 100005
#define mod 9973

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

int p[Max],d[Max2];
int t,j,z;
ll n,nr_div,suma_div,prod,nr;

void ciur(){
	ll i,j;
	for(i=2; i<Max; ++i)
		if(p[i]==0){
			d[++z]=i;
			for(j=i*i; j<Max; j+=i)
				p[j]=1;
		}
}

int main(){
	
	ciur();
	fin>>t;
	for(; t; --t){
		fin>>n;
		nr_div=suma_div=1;
		
		for(j=1; d[j]*d[j]<=n; ++j){
			nr=0; prod=1;
			while(n % d[j] ==0 ){
				nr++; prod*=d[j];
				n /= d[j];
			}
			if(nr){
				nr_div*=nr+1;
				suma_div*=(prod*d[j]-1)/(d[j]-1);
				suma_div %= mod;
			}
		}
		if( n>1 ) nr_div*=2, suma_div*=n+1, suma_div%=mod;
		fout<<nr_div<<" "<<suma_div<<"\n";
	}
	
	fin.close(); fout.close();
	return 0;
}