Cod sursa(job #687086)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 22 februarie 2012 08:22:02
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#define lim 100000
#include <cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g ("ssnd.out");
bool   v[lim+1]={0};
int prim[100001];
void ciur (){
	prim[1]=2;
	prim[-1]=1;
	for(int i=3;i<=lim;i+=2)
		if(v[i]==0){
			prim[++prim[-1]]=i;
			for(int j=i+i;j<=lim;j+=i)
				v[j]=i;
		}
}
void determinare(long long r){
	long long ndiv, suma, t, i, ex;
	ndiv=suma=1;
	for(i=1;prim[i]*prim[i]<=r;i++){
		if(r%prim[i]==0){
			ex=1;
		    t=prim[i];
			while(r%prim[i]==0){
				t=t*prim[i];
				ex++;
				r/=prim[i];
			}
			ndiv*= ex;
			suma*=(t-1)/(prim[i]-1)%9973;
		}
	}
	if(r!=1){
		suma*=(r*r-1)/(r-1)%9973;
		ndiv*=2;
	}
	g<<ndiv<<" "<<suma%9973<<"\n";
}
int main (){
	long long n,k;
	f>>n;
	ciur();
	for(;n;n--){
		f>>k;
		determinare(k);
	}
	return 0;
}