Cod sursa(job #734018)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 13 aprilie 2012 13:32:10
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include<fstream>
#include<algorithm>
#include<math.h>
#define lim 1000001
using namespace std;

ifstream f("ssnd.in");
ofstream g("ssnd.out");

int t;
long long n;
int prim[lim];
long long nrp[lim];

void ceva(long long n){
	long long ndiv, suma, t, i, ex;
	ndiv=suma=1;
	for(i=1;nrp[i]*nrp[i]<=n;i++){
		if(n%nrp[i]==0){
			ex=1;
		    t=nrp[i];
			while(n%nrp[i]==0){
				t=t*nrp[i];
				ex++;
				n/=nrp[i];
			}
			ndiv*= ex;
			suma*=(t-1)/(nrp[i]-1)%9973;
		}
	}
	if(n!=1){
		suma*=(n*n-1)/(n-1)%9973;
		ndiv*=2;
	}

	g<<ndiv<<" "<<suma%9973<<"\n";
}

int main(){

	f>>t;
	for(int i=2;i<=lim;i++)
		if(prim[i]==0)
			for(int j=i+i;j<=lim;j+=i)
				prim[j]=1;
	int k=0;
	for(int i=2;i<=lim;i++)
		if(!prim[i])
			nrp[++k]=i;
		
	for(int i=1;i<=t;i++){

		f>>n;
		ceva(n);
	}
	
	return 0;
}