标签:[[数学]]
思路:
我们把求 X 的式子乘个2再移项,会发现所谓的半公倍数就是这些 ai 的二分之一的奇数倍,一个奇数乘奇数还是奇数,所以我们只需要从最小半公倍数一直这样乘到m,然后统计乘了几次就行。
至于最小半公倍数的求法,用求最小公倍数的方法求ai/2的最小公倍数即可。
时空复杂度:O(n), O(n)
核心代码:
int n, m;
int a[N];
int lcm(int a, int b)
{
return a * b / __gcd(a, b);
}
void solve()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i],a[i] /= 2;
int LCM = 1;
for (int i = 1; i <= n; i++)
LCM = lcm(a[i], LCM);
for(int i=1;i<=n;i++)
{
if((LCM/a[i])%2==0)
{
cout<< 0 << endl;
return;
}
}
int cnt=0;
for(int i=1;i*LCM<=m;i+=2)
cnt++;
cout << cnt << endl;
}
741

被折叠的 条评论
为什么被折叠?



