Cod sursa(job #688165)

Utilizator pandreeaePopescu Andreea pandreeae Data 23 februarie 2012 09:20:40
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;

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

const long MAX_N=1000000;
int  p[100000];
bitset <MAX_N> v;

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