Cod sursa(job #650687)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 18 decembrie 2011 18:34:27
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
bool v[1000001]={0};
int prim[100001];
void ciur (){
	prim[1]=2;
	prim[-1]=1;
	for(int i=3;i<=1000000;i+=2)
		if(v[i]==0){
			prim[++prim[-1]]=i;
			for(int j=i+i;j<=1000000;j+=i)
				v[j]=i;
		}
}
void determinare(long long y){
	long long nr, s, t, i, ex;
	nr=s=1;
	for(i=1;prim[i]*prim[i]<=y;i++){
		if(y%prim[i]==0){
			ex=1;
		    t=prim[i];
			while(y%prim[i]==0){
				t=t*prim[i];
				ex++;
				y/=prim[i];
			}
			nr*=ex;
			s*=(t-1)/(prim[i]-1)%9973;
		}
	}
	if(y!=1){
		s*=(y*y-1)/(y-1)%9973;
		nr*=2;
	}
	fout<<nr<<" "<<s%9973<<"\n";
}
int main (){
	long long n ,w;
	fin>>n;
	ciur();
	while(n--){
		fin>>w;
		determinare(w);
	}
	return 0;
}