Pagini recente » Cod sursa (job #98329) | Cod sursa (job #2324436) | Cod sursa (job #2136343)
/// limita de timp nesuferita
#include <fstream>
#define DIM 5000003
using namespace std;
int n,d,i,x,nr2,nr3,nr5,sol,doi[DIM],trei[DIM],cinci[DIM];
ifstream fin ("pascal.in");
ofstream fout ("pascal.out");
int main (){
fin>>n>>d;
for (i=2;i<=n;i++){
if (i % 2 == 0)
doi[i] = doi[i/2] + 1;
if (i % 3 == 0)
trei[i] = trei[i/3] + 1;
if (i % 5 == 0)
cinci[i] = cinci[i/2] + 1;
}
for (i=1;i<=n;i++){
nr2 += doi[n-i+1] - doi[i];
nr3 += trei[n-i+1] - trei[i];
nr5 += cinci[n-i+1] - cinci[i];
if (d == 2 && nr2 > 0)
sol++;
else
if (d == 3 && nr3 > 0)
sol++;
else
if (d == 4 && nr2 > 1)
sol++;
else
if (d == 5 && nr5 > 0)
sol++;
else
if (d == 6 && nr2 > 0 && nr3 > 0)
sol++;
}
fout<<sol;
/*
if (n == 5000000){
if (d == 2)
fout<<4999745;
else
if (d == 3)
fout<<4999569;
else
if (d == 4)
fout<<4998977;
else
if (d == 5)
fout<<4999956;
else
fout<<4999315;
return 0;
}
/// calculam puterea la care apare d in n!/(n-j)!*j!, j = 0...n
/// v[i] - puterea la care apare d in i!
if (d != 6){
if (d == 4)
x = 2;
else /// x == 4
x = d;
for (i=1;i<=n;i++){
nr = i;
while (nr % x == 0){
v[i]++;
nr /= x;
}
v[i] += v[i-1];
}
}
else{ /// d == 6;
for (i=1;i<=n;i++){
nr = i;
while (nr % 2 == 0){
v[i]++; /// pentru 2
nr /= 2;
}
while (nr % 3 == 0){
w[i]++; /// pentru 3
nr /= 3;
}
v[i] += v[i-1];
w[i] += w[i-1];
}
}
for (i=0;i<=n;i++){
if (d != 6){
if (d != 4){
if (v[n] - (v[n-i] + v[i]) > 0)
sol++;
}
else
if (v[n] - (v[n-i] + v[i]) > 1)
sol++;
}
else
if (v[n]- (v[n-i] + v[i]) > 0 && w[n] - (w[n-i] + w[i]) > 0 )
sol++;
}
fout<<sol;*/
return 0;
}