Cod sursa(job #2381708)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 17 martie 2019 12:34:27
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <bits/stdc++.h>
#define MAX 1000010
#define MOD 9973
#define ll long long 
using namespace std;
 
bool E[MAX];
int n;
ll ne=1,se=1,l=0,b,c,V[MAX];
//Suma si numarul divizorilor
 
ll fast_exp(ll a,ll b){
	if(b==1)return a;
	ll c=fast_exp(a,b/2);
	c*=c;
	if(b%2)c*=a;
	return c;
}
 
int main(){
	ifstream cin("ssnd.in");
	ofstream cout("ssnd.out");
	for(int i=2;i<=MAX;i++){
		if(!E[i]){
			V[l++]=i;
			for(ll j=i*i;j<=MAX && j>0;j++){
				E[i]=1;
			}
		}
	} 
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>c;
		b=c;
		int j=0;
		while(b>1 && j<l){
			if(b%V[j]==0){
				//V[j]
				int counter=1;
				ll prod=V[j];
				while(b%V[j]==0){
					b/=V[j];
					counter++;
				}
				ll e=fast_exp(V[j],counter)-1;
				ne*=counter;
				se*=(se*e/(V[j]-1))%MOD;
			}
			if(V[j]>sqrt(c) && b>1){
				//b
				se=(se*(b*b-1)/(b-1))%MOD;
				ne*=2;
				b=1;
			}
			j++;
		}
		cout<<ne<<' '<<se<<'\n';
		ne=se=1;
	}
	return 0;
}