Cod sursa(job #721859)

Utilizator hainagiudanielHainagiu Daniel hainagiudaniel Data 24 martie 2012 12:18:18
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin ("ssnd.in");
ofstream fout ("ssnd.out");
bool v[1000001]={0};
int prim[100000];

 void ciur()
 {
	prim[0]=1;
	prim[1]=2;
	for(int i=3;i<=1000000;i+=2){
	if(v[i]==0){
		prim[++prim[0]]=i;
		for(int j=2*i; j<=1000000; j+=i)
			v[j]=1;}}
 }
 
 void desco(long long x)
 {
	long long nr, sum, t, i, exp;
	nr=sum=1;
	for(i=1; prim[i]*prim[i]<=x ;i++){
		if(x%prim[i]==0){
		exp=1;
		t=prim[i];
		while(x%prim[i]==0){
			exp++;
			x=x/prim[i];
			t=t*prim[i];}
		nr*=exp;
		sum*=(t-1)/(prim[i]-1)%9973;}}
	if(x!=1){
		sum*=(x*x-1)/(x-1)%9973;
		nr*=2;}
	fout<<nr<<' '<<sum%9973<<endl;
 }
 
int main()
{
	long long n, q;
	ciur();
	fin>>n;
	while(n--){
		fin>>q;
		desco(q);}
	return 0;
}