无关(relationship)
https://www.nowcoder.com/acm/contest/135/A
题目描述
若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关。
给出一个含有k个元素的集合A={a1,a2,a3,...,ak},求区间[L,R]内与A无关的正整数的个数。
保证A内的元素都是素数。
输入描述:
输入数据共两行: 第一行三个正整数L,R,k,意义如“题目描述”。 第二行k个正整数,描述集合A,保证k个正整数两两不相同。
输出描述:
输出数据共一行: 第一行一个正整数表示区间[L,R]内与集合A无关的正整数的个数
示例1
输入
1 10 4 2 3 5 7
输出
1
输入
2 10 4 2 3 5 7
输出
0
说明
对于30%的数据:1<=L<=R<=10^6 对于100%的数据:1<=L<=R<=10^18,1<=k<=20,2<=ai<=100
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[22];
ll check(ll l, ll r, ll x)
{
return r/x-(l-1)/x;
}
int main()
{
ll l,r;int k;
scanf("%lld%lld%d",&l,&r,&k);
for(int i=0;i<k;i++) scanf("%lld",&a[i]);
ll ans=0;
for(int s=0;s<(1<<k);s++)
{
ll c=1,cnt=0;
int flag=0;
for(int j=0;j<k;j++)
{
if(s>>j&1)
{
if(c*a[j]<c) flag=1;
c*=a[j],cnt++;
}
}
if(flag) continue;
if(cnt%2) ans-=check(l,r,c);
else ans+=check(l,r,c);
}
printf("%lld\n",ans);
return 0;
}