Pagini recente » Cod sursa (job #265581) | Cod sursa (job #2229538) | Cod sursa (job #2465632) | Cod sursa (job #70990) | Cod sursa (job #734161)
Cod sursa(job #734161)
#include <fstream>
using namespace std;
int x,i,d,n,sol,d1,d2,D,x1,x2,div1[5000001],div2[5000001];
int main()
{
ifstream fi("pascal.in");
ofstream fo("pascal.out");
fi>>n>>D;
if(D==6) { d1=2; d2=3; } else
if(D==4) d1=2; else d1=D;
for(i=1;i<=n;i++)
{
//calculez divizorii pentru i!
x=i;
if(d1!=2) while(x%d1==0) { div1[i]++; x/=d1; } else while((x&1)==0) {div1[i]++; x=x>>1; }
div1[i]+=div1[i-1];
if(d2!=0)
{
while(x%d2==0) { div2[i]++; x/=d2; }
div2[i]+=div2[i-1];
}
}
int m=n>>1;
if(D==6) for(i=0;i<=m;i++)
{
x1=div1[n]-div1[i]-div1[n-i];
x2=div2[n]-div2[i]-div2[n-i];
if(x1 and x2) sol+=2;
if(i==(n>>1) and (n&1)==0) sol--;
}
if(D==4) for(i=0;i<=m;i++)
{
x1=div1[n]-div1[n-i]-div1[i];
if(x1>1) sol+=2;
if(i==(n>>1) and (n&1)==0) sol--;
}
if(D!=6 and D!=4) for(i=0;i<=m;i++)
{
x1=div1[n]; x2=div1[n-i]+div1[i];
if(x1>x2) sol+=2;
if(i==(n>>1) and (n&1)==0) sol--;
}
fo<<sol<<"\n";
return 0;
}