~cpp
// no10050 - Hartals
#include <iostream>
using namespace std;
const int MAX_DAY = 3651; // 시뮬레이션을 돌릴 최대날짜
void make_red_day(bool * day, const int & P, const int & N);
void count_red_day(const bool * day, const int & N, int & red);
inline void input_N(int & N) { cin >> N; };
inline void input_P(int & P) { cin >> P; };
inline void init_days(bool * day, const int & N) { for (int i=1; i<=N; i++) day[i] = false; };
inline void show_red_day(const int & red) { cout << red << endl; };
int main()
{
bool days[MAX_DAY]; // 동맹휴업여부
int nCase; // Case의 개수
int N; // 시뮬레이션을 돌릴날짜
int P; // 정당의 개수
int nRed; // 휴업수
cin >> nCase;
int i;
for (i=0; i<nCase; i++)
{
input_N(N);
init_days(days, N);
input_P(P);
make_red_day(days, P, N);
count_red_day(days, N, nRed);
show_red_day(nRed);
}
return 0;
}
void make_red_day(bool * day, const int & P, const int & N)
{
int i, j;
int H; // 동맹휴업지수
for (i=0; i<P; i++)
{
cin >> H;
for (j=H; j<=N; j += H)
day[j] = true;
}
}
void count_red_day(const bool * day, const int & N, int & red)
{
red = 0;
if (day[1])
red++;
int count = 0;
for (int i=2; i<=N; i++)
{
count++;
if (count%7 == 5)
{
count++;
i++;
continue;
}
if (day[i])
red++;
}
}