Pagini recente » Cod sursa (job #3129464) | Cod sursa (job #275468) | Rating Ghgeorghiciuc Georgia (Georgia29) | Cod sursa (job #326974) | Cod sursa (job #3225969)
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
#include <queue>
#include <map>
#define ll long long
using namespace std;
ifstream cin("pascal.in");
ofstream cout("pascal.out");
int n, D, answer;
vector<pair<int, int>> desc;
vector<ll> expF;
ll Legendre(int p, int n)
{
ll curent_p = p, cnt_p = 0;
while(curent_p <= n)
{
cnt_p += n / curent_p;
curent_p *= p;
}
return cnt_p;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> D;
int d = 2;
while(D > 1)
{
int p = 0;
while(D % d == 0)
{
p++;
D /= d;
}
if(p)
desc.emplace_back(d, p);
d++;
if(d * d > D)
d = D;
}
expF.resize(desc.size());
for(int i = 0; i < (int) desc.size(); i++)
expF[i] = Legendre(desc[i].first, n);
for(int i = 0; i <= n; i++)
{
int good = 1;
for(int j = 0; j < (int) desc.size() && good == 1; j++)
{
ll curent_exp1 = Legendre(desc[j].first, i);
ll curent_exp2 = Legendre(desc[j].first, n - i);
ll exactly_exp = expF[j] - curent_exp1 - curent_exp2;
cout << exactly_exp << '\n';
if(exactly_exp < desc[j].second)
good = 0;
}
answer += good;
}
cout << answer;
return 0;
}