博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ZOJ 2836 Number Puzzle
阅读量:4965 次
发布时间:2019-06-12

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

Number Puzzle

Time Limit: 2 Seconds      
Memory Limit: 65536 KB

Given a list of integers (A1, A2, ..., An), and a positive integer M, please find the number of positive integers that are not greater than M and dividable by any integer from the given list.

Input

The input contains several test cases.

For each test case, there are two lines. The first line contains N (1 <= N <= 10) and M (1 <= M <= 200000000), and the second line contains A1, A2, ..., An(1 <= Ai <= 10, for i = 1, 2, ..., N).

Output

For each test case in the input, output the result in a single line.

Sample Input

3 2

2 3 7
3 6
2 3 7

Sample Output

1

4


Author: 
MAO, Yiqiang

Source: 
Zhejiang University Local Contest 2007
  1. 设 n, k 都是正整数,S={1,2,···,n}, 则 S 中能被 k 整除的正整数的个数为 [n/k].
  2. 设 Ai (i=1,2,···,n) 为有限集,则ZOJ 2836 Number Puzzle - qhn999 - 码代码的猿猿
  3. lcm(x,y)=xy/gcd(x,y)
  4. lcm(x1,x2,···,xn)=lcm(lcm(x1,x2,···,xn-1),xn)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int a[11],n,m,ans;
int gcd(int a,int b)
{
    return b==0?a:gcd(b,a%b);
}
int lcm(int a,int b)
{
    return a/gcd(a,b)*b;
}
void dfs(int x,int k,int t)
{
    if(x>0)  ans+=m/t*k;
    for(int i=x;i<n;i++)
        dfs(i+1,-k,lcm(a
,t));
}
int main()
{
while(cin>>n>>m)
{
  for(int i=0;i<n;i++)
      cin>>a
;
  ans=0;
  dfs(0,-1,1);
  cout<<ans<<endl;
}
    return 0;
}

转载于:https://www.cnblogs.com/CKboss/p/3350929.html

你可能感兴趣的文章
[Z]Win下网络磁盘映射的几种简单方法
查看>>
C++根据类名动态创建对象
查看>>
出现ClassNotFoundException问题
查看>>
Python字典基础知识补充
查看>>
Python flask虚拟环境安装
查看>>
Lvs IP负载均衡技术
查看>>
SQL*Loader-128: SQL*Loader-523
查看>>
二叉搜索树转双向链表
查看>>
matlab之boundary()函数
查看>>
240. Search a 2D Matrix II
查看>>
【Go】 格式处理
查看>>
JAVA 学习笔记(2)
查看>>
数据结构与算法--图型结构的建立与搜索
查看>>
Freemarker 入门示例
查看>>
虚拟机ubuntu的常用命令集合
查看>>
第四次博客作业
查看>>
R实战读书笔记四
查看>>
java类和对象之间的差
查看>>
ACM-DP最大连续子——hdu1231
查看>>
数组指针存储在堆栈的形式
查看>>