Cod sursa(job #169131)
Utilizator | Data | 1 aprilie 2008 11:17:55 | |
---|---|---|---|
Problema | Sandokan | Scor | 50 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.52 kb |
#include <iostream.h>
#include <fstream.h>
#include <math.h>
int main()
{
fstream f1("sandokan.in",ios::in);
fstream f2("sandokan.out",ios::out);
int n,k,rest,i,max,min,x,d;
int prime[5005];
long val;
f1 >> n;
f1 >> k;
min=n%(k-1);
if (min==0) min=k-1;
min--; n--;
if (min>(n-min)) min=n-min;
max=n-min;
for (i=2;i<=5000;i++) prime[i]=0;
for (i=max+1;i<=n;i++) {
x=i;
d=1;
while (x>1) {
d++;
while (x%d==0) {
prime[d]++;
x=x/d;
}
}
}
for (i=1;i<=min;i++) {
x=i;
d=1;
while (x>1) {
d++;
while (x%d==0) {
prime[d]--;
x=x/d;
}
}
}
val=1;
for (i=5000;i>=2;i--)
if (prime[i]!=0)
for (k=1;k<=prime[i];k++)
val=val*i%2000003;
f2 << val;
f1.close();
f2.close();
return 0;
}