Cod sursa(job #2381740)

Utilizator _Victor_Victor Ciobanu _Victor_ Data 17 martie 2019 12:53:05
Problema Suma si numarul divizorilor Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 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,x,y,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+=i){
				E[j]=1;
			}
		}
	} 
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>c;
		b=c;
		int j=0;
		for(int j=1;1ll*V[j]*V[j]<=b;j++)
			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(b>1){
			//b
			ll e=b*b-1;
			se=(se*e/(b-1))%MOD;
			ne*=2;
		}
		j++;
		cout<<ne<<' '<<se<<'\n';
		ne=se=1;
	}
	return 0;
}