Cod sursa(job #1841021)

Utilizator igroitaGroita Igor igroita Data 5 ianuarie 2017 08:47:35
Problema Suma si numarul divizorilor Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<bitset>
#include<cmath>
using namespace std;

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

long long a[1000010], k=0, f[20000], ndiv, sdiv;
bitset <1000010> pr;
int t, e[20000];

void ciur(){
	for(int i=2;i<=1000010; i++){
		if(pr[i]==0){
				a[++k]=i;
			for(int j=2*i;j<=1000010; j+=i) pr[j]=1;		
		}
	}
}

int main(){
	ciur();                                    //for(int i=1; i<=200; ++i) cout<<a[i]<<"  ";
	
	unsigned long long n;
	
	cin>>t;
	
	while(t--){
	ndiv=1; sdiv=1;	
		cin>>n;
		int i=1, mm=1;
		while(n!=1){
			if(n%a[i]==0){
			f[mm]=a[i];
			e[mm]=0;
			while(n%a[i]==0){
				e[mm]++;
				n/=a[i];
			}
			mm++;
			}
			i++;
		}	
	//	cout<<"i="<<i<<"  "<<"mm="<<mm<<"\n";
		for(int z=1; z<mm; ++z){
			ndiv*=(e[z]+1);
			sdiv*=(pow(f[z],e[z]+1)-1)/(f[z]-1);
		}
		cout<<ndiv<<" "<<sdiv%9973<<"\n";
	//		for(int z=1; z<mm; ++z){
	//		cout<<f[z]<<"  "<<f[z]<<"\n";	}
		
	}
			
	return 0;
}