Cod sursa(job #687211)

Utilizator BarracudaFMI-Alex Dobrin Barracuda Data 22 februarie 2012 10:40:55
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include<fstream>
#include<cmath>
#define lim 500001
using namespace std;
ifstream f("sumdiv.in");
ofstream g("sumdiv.out");
long long A,B,nr,v[lim+1],prim[50001];
void ciur (){
	prim[1]=2;
	prim[-1]=1;
	for(int i=3;i<=lim;i+=2)
		if(v[i]==0){
			prim[++prim[-1]]=i;
			for(int j=i+i;j<=lim;j+=i)
				v[j]=i;
		}
}
long long putere (long long a,long long  b){
	if(b!=0)
		return a*putere(a,b-1);
	else
		return 1;
}
void determinare(long long r){
	long long ndiv, suma, t, i, ex;
	ndiv=suma=1;
	for(i=1;prim[i]*prim[i]<=r;i++){
		if(r%prim[i]==0){
			ex=1;
		    t=prim[i];
			while(r%prim[i]==0){
				t=t*prim[i];
				ex++;
				r/=prim[i];
			}
			ndiv*= ex;
			suma*=(t*putere(t,B)-1)/(prim[i]-1)%9901;
		}
	}
	if(r!=1){
		suma*=(r*r*putere(r,B-1)-1)/(r-1)%9901;
		ndiv*=2;
	}
	g<<suma%9901<<"\n";
}
int main (){
	f>>A>>B;
	ciur();
	determinare(A);
	return 0;
}