# Tju_Oj_2790Fireworks Show

It's Independence Day, and Farmer John has taken the cows to the fireworks show. Bessie wonders how much of the show the cows will be able to see since they might not be able to stay for the entire display.

The show features C (1 ≤ C ≤ 100) fireworks cannons conveniently numbered 1..C. Cannon i shoots fireworks every Ti (1 ≤ Ti ≤ N) seconds (all times in this task are integer seconds). In a spectacular opening, all cannons first shoot at time 0. Fireworks are visible only during the second in which they are launched from the cannon. The cows will stay at the show from time 1 through time N (1 ≤ N≤ 2,000,000).

Help Bessie figure out how many different times the cows will be able to see fireworks during the time period that they are at the show.

### Input

* Line 1: Two space-separated integers: C and N.

* Lines 2..C + 1: Line i+1 contains the single integer Ti.

### Output

* Line 1: A single integer that is the number of distinct seconds in the time interval from 1 through N that the cows will be able to see fireworks.

### Sample Inpput

2 20
4
6


### Sample Output

7


### Input Details

The show features 2 cannons: one shooting fireworks every 4 seconds, the other shooting every 6 seconds. The cows will stay at the show from time 1 to time 20. Below is a chart showing the fireworks launches and the time the cows are present.
      CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
2                                   2                                   2 ...
1           1     2     1           1           1     2     1           1 ...
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+ ...
0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ...


### Output Details

There will be fireworks at times 4, 6, 8, 12, 16, 18, and 20, for a total of 7 distinct times. (Note that time 12, where both cannons shoot fireworks simultaneously, is only counted once.) See the graph above.

 1 #include <iostream>
2 #include <stdio.h>
3 #include <stdlib.h>
4 #include <stack>
5 #include <cstring>
6 using namespace std;
7 #define N1 2000003
8 #define N2 103
9
10 int Cannon[N2];
11 int See[N1];
12 int number,end;
13 int ans = 0;
14
15 int main(){
16     memset(See,0,sizeof(See));
17     memset(Cannon,0,sizeof(Cannon));
18     cin >> number >> end;
19     for(int i = 0;i < number ;i++){
20         cin >> Cannon[i];
21     }
22     for(int i = 0;i < number ;i++){
23         for(int j = 1;j <= (end / Cannon[i]) ;j++){          //这个地方使得算法的复杂度：C*(N*（1/2 + 1/3 + 1/4 + 1/5 +...+1/N）)   <=  C*N*logN
24             See[Cannon[i] * j] = 1;
25         }
26     }
27     for(int i = 0;i < ( sizeof(See) / sizeof(See[0]) ); i++ ){
28         ans += See[i];
29     }
30     cout << ans << endl;
31 }

05-01

08-15 19

11-03 27

07-06 460

10-22 57

06-16 223

08-08 510

02-28 16

09-23 636

04-27 4834

#### 大学英语综合教程二 Unit 1 到Unit 8 课文内容英译中 中英翻译

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

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