Cod sursa(job #582534)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 15 aprilie 2011 15:07:39
Problema Suma divizorilor Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include<cstdio>
#include<vector>
#include<bitset>
using namespace std;
#define MOD 9901
#define pb push_back
#define NM 50000001
#define LL long long
int N,M;
inline int mod(int a)
{
	if (a>=MOD)
		a%=MOD;
	return a;
}
inline int putere(int n,int p)
{
	if (!p)
		return 1;
	n=mod(n);
	if (p&1)
		return n*putere(mod(n*n),p>>1);
	return putere(mod(n*n),p>>1);
}
inline void desc()
{
	int suma=1,baza=1;
	int i=2;
	for ( i=2; i*i<=N ; ++i)
	{
		if (N%i!=0)
			continue;
		int p=0;
		while (N%i==0)
		{
			N/=i;
			++p;
		}
		if (!p)
			continue;
		if (p==1)
			--p;
		int n=mod(i);
		baza=mod(putere(n,M+p+1));
		if (baza-1<0)
			baza=MOD-baza;
		n=mod(i);
		suma=mod((baza-1)/(n-1)*suma);
	}
	if (N-1)
	{
		int n=mod(N);
		 baza=mod(putere(n,M+1));
		if (baza-1<0)
			baza=MOD-baza;
		n=mod(N);
		suma=mod((baza-1)/(n-1)*suma);
	}
	printf("%d ",suma);
}
inline void citire()
{
	freopen("sumdiv.in","r",stdin);
	freopen("sumdiv.out","w",stdout);
	scanf("%d%d",&N,&M);
	
	desc();
}
int main()
{
	citire();
	return 0;
}