Pagini recente » Cod sursa (job #1551034) | Cod sursa (job #83944) | Cod sursa (job #262425) | Cod sursa (job #3004920) | Cod sursa (job #71750)
Cod sursa(job #71750)
#include <fstream>
using namespace std;
long r, d, s[50000001], s1[50000002];
void citire() {
ifstream fin("pascal.in");
fin >> r >> d;
fin.close();
}
long putere(long x, int d) {
long nr = 0;
while (!(x % d)) {
nr ++;
x /= d;
}
return nr;
}
void fac_sir (long s[], int d) {
for (int i = 2; i <= r; i ++)
s[i] = putere(i, d);
}
long divizor (long x, long x3, long d) {
switch (d) {
case 2 :
case 3 :
case 5 :
return (x > 0);
break;
case 6 :
return (x > 0 && x3 > 0);
break;
case 4 :
return (x > 1);
break;
}
return 0;
}
long numar() {
long nr = 0, nrd1 = 0, nrd2, nd31 = 0, nd32;
for (long i = 1; i < (( r + 1) >> 1); i++) {
nrd2 = nrd1 + s[r - i + 1] - s[i];
nd32 = nd31 + s1[r - i + 1] - s1[i];
nrd1 = nrd2;
nd31 = nd32;
nr += divizor(nrd1, nd31, d);
}
nr <<= 1;
/*if ( !(r & 1)) {
long mij = (r >> 1);
nrd1 += s[r - mij + 1] - s[mij];
nd31 += s1[r - mij + 1] - s1[mij];
nr += divizor(nrd1,nd31, d);
}*/
return nr;
}
int main() {
citire();
if (d != 6 && d != 4)
fac_sir(s, d);
else
if (d == 4 )
fac_sir(s, 2);
else {
fac_sir(s, 2);
fac_sir(s1, 3);
}
ofstream fout("pascal.out");
fout << numar();
fout.close();
return 0;
}