分析:
具体思路见代码。
主要是注意 个
以内的素数相乘会爆
。
代码:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a[25];
int k;
ll solve(ll n)
{
if(n==0||n==1)
return 0;
ll ans=0;
for(int i=(1<<k)-1;i>=1;i--)
{
int cnt=0;
ll res=1;
for(int j=k-1;j>=0;j--)
{
if((i>>j)&1)
{
res*=a[j];
cnt++;
}
if(res>n)//注意
res=0;
}
if(res&&(cnt&1))
ans+=(n/res);
else if(res&&(cnt%2==0))
ans-=(n/res);
}
return ans;
}
int main()
{
ll l,r;
scanf("%lld%lld%d",&l,&r,&k);
for(int i=0;i<k;i++)
scanf("%lld",&a[i]);
printf("%lld\n",r-l+1-solve(r)+solve(l-1));
return 0;
}

京公网安备 11010502036488号