Pagini recente » Cod sursa (job #147136) | Cod sursa (job #1535374) | Cod sursa (job #2113060) | Cod sursa (job #1405846) | Cod sursa (job #2911456)
#include <fstream>
using namespace std;
ifstream cin("sandokan.in");
ofstream cout("sandokan.out");
unsigned long long cnt=0,t=0,nr=1;
unsigned long long ciur[5005];
unsigned long long prim[5005];
unsigned long long e1[5005];
unsigned long long e2[5005];
unsigned long long e3[5005];
unsigned long long v[50005];
unsigned long long f(unsigned long long a,unsigned long long b)
{
unsigned long long sum=0,cb=b;
for(unsigned long long j=1; j<j+1; j++)
{
if(b>a)
break;
sum+=a/b;
b*=cb;
}
return sum;
}
void E1(unsigned long long n)
{
for(unsigned long long i=1; i<=cnt; i++)
{
if(prim[i]<=n)
{
e1[i]=f(n,prim[i]);
e1[0]++;
}
else break;
}
}
void E2(unsigned long long m)
{
for(unsigned long long i=1; i<=cnt; i++)
{
if(prim[i]<=m)
{
e2[i]=f(m,prim[i]);
e2[0]++;
}
else break;
}
}
void E3(unsigned long long k)
{
for(unsigned long long i=1; i<=cnt; i++)
{
if(prim[i]<=k)
{
e3[i]=f(k,prim[i]);
e3[0]++;
}
else break;
}
}
void prod(unsigned long long a)
{
for(unsigned long long i=1; i<=nr; i++)
{
unsigned long long loc=v[i]*a+t;
v[i]=loc%10;
t=loc/10;
}
while(t>0)
{
nr++;
v[nr]=t%10;
t/=10;
}
}
void comb(unsigned long long n,unsigned long long k)
{
///completare euri
E1(n);
E2(n-k);
E3(k);
for(unsigned long long i=1; i<=cnt; i++)
{
e1[i]=e1[i]-e2[i]-e3[i];
//cout<<e1[i]<<'\n';
}
v[1]=1;
for(unsigned long long i=1; i<=cnt; i++)
{
while(e1[i]>0)
{
prod(prim[i]);
// cout<<prim[i]<<'\n';
e1[i]--;
}
}
}
int main()
{
for(unsigned long long i=4; i<5005; i+=2)
ciur[i]=1;
for(unsigned long long i=3; i*i<5005; i+=2)
{
if(ciur[i]==0)
{
for(unsigned long long j=i*i; j<5005; j+=2*i)
ciur[j]=1;
}
}
unsigned long long n,k;
cin>>n>>k;
k=(n-1)%(k-1);
n--;
for(unsigned long long i=2; i<=n; i++)
{
if(ciur[i]==0)
{
cnt++;
prim[cnt]=i;
}
}
if(k>0)
comb(n,k);
for(unsigned long long i=nr; i>=1; i--)
cout<<v[i];
return 0;
}