Cod sursa(job #949042)

Utilizator OpportunityVlad Negura Opportunity Data 12 mai 2013 11:12:38
Problema Suma si numarul divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
using namespace std;
ifstream fi("ssnd.in");
ofstream fo("ssnd.out");
#define NMAX 1000001
#define MOD 9973

long long s,n,i,j,x,v[NMAX/2],nr,p,b;
bool a[NMAX];

void ciur(){
	v[1]=2;
	for (i=3; i<NMAX; i+=2) 
		if (!a[i]) 
			for (j=i*i; j<NMAX; j+=i) a[j]=1;
	nr=1;
	for (i=3; i<NMAX; i+=2)
		if (!a[i]) 
			v[++nr]=i;
	
}

int main(){
	
	ciur();
	
	fi >> n;
	while (n--){
		fi >> x;
		s=nr=1;
		for (i=1; v[i]*v[i]<=x; i++)
			if (!(x % v[i])){
				p=1;
				b=v[i];
				while (!(x % v[i])) p++,b*=v[i],x/=v[i]; 
				nr*=p;
				s*=((b-1)/(v[i]-1)) % MOD;
			}
		if (x!=1) nr*=2,s*=((x*x-1)/(x-1))% MOD;
		fo << nr << ' ' << s << endl;
	}
	
	return 0;
}