博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu1796 How many integers can you find
阅读量:6856 次
发布时间:2019-06-26

本文共 741 字,大约阅读时间需要 2 分钟。

//设置m,Q小于n可以设置如何几号m随机多项整除
//利用已知的容斥原理
//ans = 数是由数的数目整除 - 数为整除的两个数的数的最小公倍数 + 由三个数字。。。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std ;
const int maxn = 110 ;
typedef __int64 ll ;
int a[maxn] ;
int len ;
int n , m ;
ll gcd(ll a , ll b)
{
    if(b == 0)
    return a ;
    return gcd(b, a%b) ;
}
int dfs(int pos , ll lcm)
{
    int ans = 0 ;
    for(int i = pos ;i <= len;i++)
    {
        ll lcm_n = lcm*a[i]/gcd(lcm , a[i]) ;//最小公倍数可能会爆int,被坑了一下
        ans += (n-1)/lcm_n - dfs(i+1 , lcm_n) ;
    }
    return ans ;
}
int main()
{
    while(~scanf("%d%d" , &n , &m))
    {
        len = 0 ;
        for(int i = 1;i <= m;i++)
        {
            int t ;
            scanf("%d" , &t) ;
            if(!t) continue ;//可能会有0
            a[++len] = t ;
        }
       int ans = dfs(1 , 1) ;
       printf("%d\n" , ans) ;
    }
    return  0 ;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
PHP类的定义
查看>>
Composer 中国镜像地址配置
查看>>
比特币暴跌后的连锁反应
查看>>
Python爬虫入门教程 62-100 30岁了,想找点文献提高自己,还被反爬了,Python搞起,反爬第2篇...
查看>>
第80节:Java中的MVC设计模式
查看>>
区块链100讲:以实例形式深入浅出讲透BANCOR算法
查看>>
Java并发编程 深入剖析volatile关键字
查看>>
java生成MD5校验码及算法实现
查看>>
thymeleaf 学习笔记(转)
查看>>
Mac 升级 OpenSSL
查看>>
Python学习笔记(5)-if判断、if嵌套、判断小练习
查看>>
文本转换成音频流
查看>>
负载均衡之lvs
查看>>
C#之类与对象知识点
查看>>
斯坦福大学公开课机器学习:Neural network-model representation(神经网络模型及神经单元的理解)...
查看>>
七、集成swagger2
查看>>
Python(面向对象5——高级)
查看>>
chocolatey使用
查看>>
【转】iOS高级向的十道面试问题
查看>>
昂贵的聘礼 poj 1062 Dijkstra
查看>>