Cod sursa(job #688036)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 22 februarie 2012 22:53:39
Problema Suma divizorilor Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include<fstream>
#define mod 9901
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long A,B,a1,a2,exp;
long long putere(long long n,long long p){
	long long r=1;
	while(p!=0){
		if(p%2==1)
			r=(r*n)%mod;
		n=(n*n)%mod;
		p/=2;
	}
	return r;
}
void sumaDiv(long long A,long long B){
	long long  sum=1;
	for(int i=2;i*i<=A;i++){
		if(A%i==0){
			exp=0;
			while(A%i==0){
				A/=i;
				exp++;
			}
			exp*=B;
			if(i%mod==1)
				sum=sum*(exp+1)%mod;
			else{
				a1=(putere(i,exp+1)-1)%mod;
				a2=(putere(i-1,mod-2))%mod;
				sum=((((sum)%mod)*a1)%mod*a2)%mod;
			}
		}
	}
	if(A>1){
		
		if(A%mod==1)
			sum=(sum*(B%mod+1))%mod;
		else{
			a1=(putere(A,B+1)-1)%mod;
			a2=(putere(A-1,mod-2))%mod;
			sum=((((sum)%mod)*a1)%mod*a2)%mod;
		}
	}
	g<<sum<<"\n";
}
int main (){
	f>>A>>B;
	sumaDiv(A,B);
	return 0;
}