Cod sursa(job #639045)

Utilizator pandreeaePopescu Andreea pandreeae Data 22 noiembrie 2011 11:00:02
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.82 kb
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
 ifstream in ("ssnd.in");
 ofstream out ("ssnd.out");
 long long i, d, j, n, x, exp ,nrdiv=1, sdiv=1, ok, t, aux;
 bool v[1000001]={0};
 in>>n;
 
 for(i=1;i<=10000;i++){
	  ok=1;
	  x=i*2+1;
	  if(x==1||x%2==0) ok=0;
	  else{
		   for(d=3;d<x/2&&ok==1;d+=2)
			if(x%d==0) ok=0;}
	  if(ok==1)
		  v[i]=1;}
 v[0]=1;
 
 for(i=1;i<=n;i++){
		in>>x;
		aux=x/2;
		nrdiv=sdiv=1;
		for(j=0;j*2+1<=aux;j++){
			if(v[j]==0)
				continue;
			d=j*2+1;
			if(j==0)d=2;
			if(x%d!=0)
				continue;
			exp=1;
			t=d;
			while(x%d==0){
				exp++;
				x=x/d;
				t=t*d;}
			nrdiv=nrdiv*exp;
			sdiv=sdiv*((t-1)/(d-1));
		}
		if(sdiv==1){
			sdiv=x+1;
			nrdiv=2;}
		out<<nrdiv<<' '<<sdiv<<endl;
 }
 
 return 0;
}