Cod sursa(job #612547)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 8 septembrie 2011 17:41:17
Problema Kperm Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include<fstream.h>
#define N 666013
#define lul unsigned long long
lul n,k,c,r,a,b,d,e,t,s;

lul fact(lul n)
{if(!n)
       return 1;
return (n*fact(n-1))%N;}

lul put(lul x,lul n)
{lul i,x1=x%N,x2=(x*x)%N,k=0,v[70];
while(n)
      v[++k]=n%2,n/=2;
for(i=k-1;i;i--)
if(!v[i])
      x2=(x1*x2)%N,x1=(x1*x1)%N;
else
      x1=(x1*x2)%N,x2=(x2*x2)%N;
return x1;}

int main()
{ifstream f("kperm.in");
ofstream g("kperm.out");
f>>n>>k;
if(k%2==0)
       g<<"0";
else
       {c=n/k,r=n%k;
       a=fact(r);
       b=fact(k-r);
       d=fact(c);
       e=((c+1)*fact(c))%N;
       t=(a*b)%N;
       d=put(d,k-r);
       e=put(e,r);
       s=(d*e)%N;
       g<<((t*s)%N);}
return 0;}