Cod sursa(job #198114)

Utilizator swift90Ionut Bogdanescu swift90 Data 8 iulie 2008 16:19:32
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include<stdio.h>
long long a,b,x,nr[1000],ap[1000],sol,ax;
long long put(long long m,long long n){
	long long t=1;
	for(;n;n>>=1){
		if(n&1)
			t=(t*m)%9901;
		m=(m*m)%9901;
	}
	return t;
}
int main(){
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%lld%lld",&a,&b);
	int i;
	for(i=2;i*i<=a;++i){
		if(!(a%i)){
			nr[++x]=i;
			while(a%i==0){
				a/=i;
				++ap[x];
			}
		}
	}
	
	if(a>1){
		nr[++x]=a;
		ap[x]=1;
	}
	
	sol=1;
	for(i=1;i<=x;++i){
		ap[i]*=b;
		if(nr[i]%9901==1)
			ax=ap[i]+1;
		else{
			ax=(put(nr[i],ap[i])*nr[i]+9900)%9901;
			ax=(put(nr[i]-1,9899)*ax)%9901;
		}
		sol=(sol*ax)%9901;
	}
	
	printf("%lld\n",sol);
	fclose(stdin);
	fclose(stdout);
	return 0;
}