Cod sursa(job #967065)

Utilizator dropsdrop source drops Data 27 iunie 2013 00:16:47
Problema Suma si numarul divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <bitset>
#include <queue>
#include <deque>
#include <list>
#include <ctime>
#include <string>
#include <algorithm>
using namespace std;
ifstream ff("ssnd.in");
ofstream gg("ssnd.out");
#define max 1000001
#define md 9973
bitset<max>pp;
vector<long long>qq;
void ciu(){
	int i=2, l=(int)sqrt(max);
	while(i<=l){
		while(pp[i])i++;
		for(int j=i*i;j<max;j+=i)pp[j]=1;
		i++;
	}
	for(int i=2;i<max;i++)
	if(!pp[i]) qq.push_back(i);
}

void dsc(long long n){
	int d=1, d1, i=0, l=qq.size();
	long long s=1, p;
	while(n!=1 && i<l && qq[i]*qq[i]<=n){
		if(n%qq[i]==0){
			d1=0;
			p=qq[i];
			while(n%qq[i]==0){ n/=qq[i]; d1++; p*=qq[i]; }
			d*=(d1+1);
			s=s*((p-1)/(qq[i]-1))%md;
		}
		i++;
	}
	if(n!=1){
		d*=2;
		s=s*((n*n-1)/(n-1))%md;
	}
	gg << d << " " << s << "\n";
}

int main(){
	int t;
	long long n;
	ciu();
	ff >> t;
	while(t--){
		ff >> n;
		dsc(n);
	}
	return 0;
}