Pagini recente » Cod sursa (job #2104939) | Cod sursa (job #563414) | Cod sursa (job #2545866) | Cod sursa (job #2273391) | Cod sursa (job #2195983)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("pascal.in");
ofstream out("pascal.out");
const int maxR = 50000000;
int f[3][maxR+1];
void computeF(int r, int m) {
for(int d = 2; d <= r; d++) {
int k = d, c = 0;
if(m == 2 || m == 4 || m == 6) {
while(k%2 == 0) {
k /= 2;
c++;
}
f[0][d] = f[0][d-1]+c;
k = d, c = 0;
}
if(m == 3 || m == 6) {
while(k%3 == 0) {
k /= 3;
c++;
}
f[1][d] = f[1][d-1]+c;
k = d, c = 0;
}
if(m == 5) {
while(k%5 == 0) {
k /= 5;
c++;
}
f[2][d] = f[2][d-1]+c;
}
}
}
int main()
{
int r, d, s = 0, dif[3];
in >> r >> d;
computeF(r, d);
for(int j = 1, n = r/2; j <= n; j++) {
dif[0] = f[0][r] - f[0][j] - f[0][r-j];
dif[1] = f[1][r] - f[1][j] - f[1][r-j];
dif[2] = f[2][r] - f[2][j] - f[2][r-j];
switch(d) {
case 2:
s += (dif[0] > 0);
break;
case 3:
s += (dif[1] > 0);
break;
case 4:
s += (dif[0] > 1);
break;
case 5:
s += (dif[2] > 0);
break;
case 6:
s += (dif[0] > 0 && dif[1] > 0);
break;
}
}
s *= 2;
if(r%2 == 0) s--;
out << s;
return 0;
}