Pagini recente » Cod sursa (job #1660813) | Cod sursa (job #948155) | Cod sursa (job #2550139) | Cod sursa (job #1325010) | Cod sursa (job #68925)
Cod sursa(job #68925)
#include <fstream>
using namespace std;
long r, d, s[2000000], s1[2000000];
void citire() {
ifstream fin("pascal.in");
fin >> r >> d;
fin.close();
}
void factori_primi(long s[], int d) {
for (int i = 1; i <=r; i ++) {
s[i] = 0;
for (long p = d; p <= i; p*=d)
s[i] += i/p;
}
}
int divizor (long r, long n) {
switch (d) {
case 2 :
case 3 :
case 5 :
return (s[r] - s[r - n] - s[n] > 0);
break;
case 4 :
return (s[r] - s[r - n] - s[n] > 1);
break;
case 6 :
return (s[r] - s[r - n] - s[n] > 0 && s1[r] - s1[r - n] - s1[n] > 0);
}
}
long numar() {
long nr = 0;
for (long i = 1; i < (( r + 1) >> 1); i++)
nr += divizor(r, i);
nr <<= 1;
if ( (r & 1) == 0 )
nr += divizor(r, (r >> 1));
return nr;
}
int main() {
citire();
if (d != 6 && d != 4)
factori_primi(s, d);
else
if (d == 4 )
factori_primi(s, 2);
else {
factori_primi(s, 2);
factori_primi(s1, 3);
}
ofstream fout("pascal.out");
fout << numar();
fout.close();
return 0;
}