Cod sursa(job #569694)

Utilizator ProcopliucProcopliuc Adrian Procopliuc Data 2 aprilie 2011 01:52:02
Problema Suma divizorilor Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
# include <fstream>
# include <bitset>
# define mod 9901
using namespace std;
ifstream f ("sumdiv.in");
ofstream g ("sumdiv.out");
long long int n;
long long int q,w,nn,pd,k,i,p,t,j;
  

  
  long long int putere (long long int a,long long int b)
  {
	  if (b==1)
		  return a%mod;
	  else
		  if (b%2==0)
			 { 
				long long int x=putere (a,b/2);
				 return (x*x)%mod;
		     }
		  else
			  return a*putere (a,b-1)%mod;
  }

int main ()
{
		f>>n>>nn;
		pd=1;
		for (i=2;i*i<=n && n!=1;i++)
		{
			
			if (n%i==0)
			{	
				p=0;
				while (n%i==0)
				{
					n=n/i;
					p++;

				}
				p*=nn;
			if (i%mod)
			{
			q=(putere (i,p+1)%mod)-1;
			w=(putere ((i-1),mod-2))%mod;
			if (q<0)
				q+=mod;
			pd=(pd*((q*w)%mod))%mod;
			}
			else
			{
				pd*=(p+1)%mod;
				pd=pd%mod;
			}
		
			}
		}
		if (n!=1)
		{
			p=nn;
			i=n;
			if  (i%mod!=1)
			{
			q=(putere (i%mod,p+1)-1)%mod;
			w=(putere ((i-1),mod-2))%mod;
			if (q<0)
				q+=mod;
			pd=(pd*((q*w)%mod))%mod;
			}
			else
			{	
				pd*=(p+1)%mod;
				pd=pd%mod;
			}
		}
		
		g<<pd;
	
	return 0;
}