Cod sursa(job #582884)

Utilizator informatician29kill03 informatician29 Data 16 aprilie 2011 14:38:10
Problema Suma si numarul divizorilor Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream>
#include<cmath>
using namespace std;
ifstream f("ssnd.in");
ofstream g("ssnd.out");
long long putere,sumad,nr;
long long ridicare(int  baza,int expo)
{int k;
putere=1;
for(k=1;k<=expo+1;k++)
    putere*=baza;
return putere;
}
int prim(long long numar)
{int ok,d;
ok=1;
if(numar==1) return 1; else 
	for(d=2;d<=sqrt(numar);d++)
    if(numar%d==0 ) ok=0;
return ok;
}
int main()
{int i,t,j,fm,nrd,good;
f>>t;
for(i=1;i<=t;i++)
{f>>nr; nrd=sumad=1; if(nr==1) {nrd*=1; sumad*=1;} else if(nr==0) {nrd*=0; sumad*=0;} else if(prim(nr)) {nrd*=2; sumad*=(1+nr); } else { 
good=0;
	for(j=2;j<=nr;j++) 
	{fm=0; if(nr%j==0 && prim(j)) 
		{while(nr%j==0) {fm++; nr/=j;}
		nrd*=(fm+1); sumad*=(ridicare(j,fm)-1)/(j-1); }
		if(prim(nr) && good==0) {good=1;  nrd*=2; sumad*=(ridicare(nr,1)-1)/(nr-1); }
} 
}g<<nrd<<" "<<sumad%9973<<'\n';}
return 0;
}