zoukankan      html  css  js  c++  java
  • HDU 1796 How many integers can you find(容斥原理)

    题意

    就是给出一个整数n,一个具有m个元素的数组,求出1-n中有多少个数至少能整除m数组中的一个数

    (1<=n<=10^18.m<=20)

    题解

    这题是容斥原理基本模型。

    枚举n中有多少m中元素的个数,在结合LCM考虑容斥。

     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<cmath>
     5 #include<algorithm>
     6 using namespace std;
     7 const long long N=205;
     8 long long a[N],n,m,ans;
     9 long long gcd(long long x,long long y){
    10     if(y==0)return x;
    11     else return gcd(y,x%y);
    12 }
    13 long long lcm(long long x,long long y){
    14     return x/gcd(x,y)*y;
    15 }
    16 void dfs(long long now,long long num,long long res,long long k){
    17     if(res==0){
    18         if(num==0)return;
    19         long long tmp=n/num;
    20         if(k&1)ans+=tmp;
    21         else ans-=tmp;
    22         return;
    23     }
    24     if(now==m+1)return ;
    25     if(lcm(num,a[now])<=n)dfs(now+1,lcm(num,a[now]),res-1,k);
    26     dfs(now+1,num,res,k);
    27 }
    28 int main(){
    29     while(scanf("%lld%lld",&n,&m)!=EOF){
    30         n--;
    31         for(long long i=1;i<=m;i++)scanf("%lld",&a[i]);
    32         for(long long i=1;i<=m;i++)dfs(1,1,i,i);
    33         printf("%lld
    ",ans);
    34     }
    35 } 
  • 相关阅读:
    thinkphp 学习1-模型
    apache 2.4目录权限
    标头 header()函数的用法
    PHP面试题一
    php学习
    如何执行超过一百兆(100MB)的sql脚本?
    jquery-numberformatter插件
    xpath 获取父级,和同级
    Vue el-table 行编辑验证、重置
    Vue 弹窗一个新增编辑页面
  • 原文地址:https://www.cnblogs.com/Xu-daxia/p/9715483.html
Copyright © 2011-2022 走看看