(容斥原理)acwing 890. 能被整除的数

890. 能被整除的数

题目链接https://www.acwing.com/problem/content/892/
题目:
在这里插入图片描述

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>

using namespace std;
typedef long long LL;
int main(){
    int n;
    int m;
    cin>>n>>m;
    int a[17];
    for(int i=0;i<m;i++){
        cin>>a[i];
    }
    int res=0;
    for(int i=1;i<1<<m;i++){
        int t=1;//判断质数之积是否超过n
        int sum=0;//判断i中有几个1
        int flag=1;
        for(int j=0;j<m;j++){
            if(i>>j&1){
                if((LL)t*a[j]>n){
                    flag=0;
                    break;
                }
                sum++;
                t*=a[j];
            }
        }
        if(!flag) continue;
        if(sum&1)res+=n/t;
        else res-=n/t;

    }
    cout<<res;
    return 0;
}


容斥原理大佬详细思路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值