题目:https://www.nowcoder.com/acm/contest/135/A
思路:先找出含有这些质数因子的数的个数,然后再减去。记住:会爆因子乘积long long
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[100];
int main()
{
ll l,r;
int k;
while(~scanf("%lld%lld%d",&l,&r,&k))
{
for(int i=1;i<=k;i++)
{
scanf("%lld",&a[i]);
}
ll ans=0;
ll sum;
for(ll i=1;i<(1<<k);i++)
{
int flag=1;
//cout<<i<<' ';
ll x=i;
ll cs=1;
int js=1;
int ss=0;
while(x)
{
if(x&1)
cs*=a[js],ss++;
if(cs>r)
{
flag=0;
break;
}
x>>=1;
js++;
}
//cout<<endl;
if(!flag)continue;
ll z=r-r%cs;
if(z<l)
{
continue;
}
else
{
z=z-l+1;
if(z%cs==0)
{
sum=z/cs;
}
else
{
sum=z/cs+1;
}
}
if(ss%2==0)ans-=sum;
else ans+=sum;
}
printf("%lld\n",r-l+1-ans);
}
return 0;
}