Problem:


Score : 400 points

Problem Statement

Given are a sequence A= {a_1,a_2,......a_N} of N positive even numbers, and an integer M.

Let a semi-common multiple of A be a positive integer X that satisfies the following condition for every k (1 \leq k \leq N):

There exists a non-negative integer p such that X= a_k \times (p+0.5).

Find the number of semi-common multiples of A among the integers between 1 and M (inclusive).

Constraints

1 \leq N \leq 10^5

1 \leq M \leq 10^9

2 \leq a_i \leq 10^9

a_i is an even number.

All values in input are integers.

Input

Input is given from Standard Input in the following format:

N M
a_1 a_2 ... a_N

Output

Print the number of semi-common multiples of A among the integers between 1 and M (inclusive).

Sample Input 1

2 50
6 10

Sample Output 1

2

15 = 6  \times 2.5 

15 = 10 \times 1.5 

45 = 6  \times 7.5 

45 = 10 \times 4.5 

Thus, 15 and 45 are semi-common multiples of A. There are no other semi-common multiples of A between 1 and 50, so the answer is 2.

Sample Input 2

3 100
14 22 40

Sample Output 2

0

The answer can be 0.

Sample Input 3

5 1000000000
6 6 2 6 2

Sample Output 3

166666667



Sample input:
2 50
6 10


Sample output:
2

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0
    for n in range(99999999999999):
        if n % 2 == 1 or n < 2:
            break
        n = n / 2
        i += 1
    return i

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for i in range(9999999999999):
        result = A[0] * (0.5 + i)

        if result > M:
            print(0)
            exit(0)

#        print('半公倍数候補：{}'.format(result))

        for j in range(1, len(A)):
 #           print('A:{} j:{}, len(A):{}'.format(A,j,len(A)))
            # A[0]の半公倍数を自身の半数で割ったとき、割り切れて、商が奇数であれば、自身の半公倍数でもある
            q, mod = divmod(result, A[j]/2)
  #          print('{} ÷ {} = {}'.format(result, A[j]/2,q))
            if q % 2 == 1 and mod == 0:
                if j == len(A)-1:
                    return int(result)
   #             print('次のjに行くよ')
                continue
            else:
    #            print('次の半公倍数を求めるよ')
                break


    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 2で割り切れる回数が異なる→半公倍数はない
# → その場で終了
p = nankai_2de_warikireruka(A[0])
for i in range(1, len(A)):
    pi = nankai_2de_warikireruka(A[i])
    if pi != p:
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
#print('最小半公倍数：{}'.format(min_hankobaisu))
print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0
    for n in range(99999999999999):
        if n % 2 == 1 or n < 2:
            break
        n = n / 2
        i += 1
    return i

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for i in range(9999999999999):
        result = A[0] * (0.5 + i)

        if result > M:
            print(0)
            exit(0)

#        print('半公倍数候補：{}'.format(result))

        for j in range(1, len(A)):
 #           print('A:{} j:{}, len(A):{}'.format(A,j,len(A)))
            # A[0]の半公倍数を自身の半数で割ったとき、割り切れて、商が奇数であれば、自身の半公倍数でもある
            q, mod = divmod(result, A[j]/2)
  #          print('{} ÷ {} = {}'.format(result, A[j]/2,q))
            if q % 2 == 1 and mod == 0:
                if j == len(A)-1:
                    return int(result)
   #             print('次のjに行くよ')
                continue
            else:
    #            print('次の半公倍数を求めるよ')
                break


    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 2で割り切れる回数が異なる→半公倍数はない
# → その場で終了
p = nankai_2de_warikireruka(A[0])
for i in range(1, len(A)):
    pi = nankai_2de_warikireruka(A[i])
    if pi != p:
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
#print('最小半公倍数：{}'.format(min_hankobaisu))
print(int((M/min_hankobaisu+1)/2))

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0
    for n in range(99999999999999):
        if n % 2 == 1 or n < 2:
            break
        n = n / 2
        i += 1
    return i

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a / 2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 2で割り切れる回数が異なる→半公倍数はない
# → その場で終了
p = nankai_2de_warikireruka(A[0])

for i in range(1, len(A)):
    pi = nankai_2de_warikireruka(A[i])
    if pi != p:
        print(0)
        exit(0)

# A[i] が2*偶数の場合はだめ？
#for i in range(0, len(A)):
#    if (A[i] / 2) % 2 == 0:
#        print(0)
#        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
#print('最小半公倍数：{}'.format(min_hankobaisu))
print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
n, m = map(int, input().split())
l = list(map(int, input().split()))

import fractions
from functools import reduce

def lcm_base(x, y):
  return (x * y) // fractions.gcd(x, y)

def lcm_list(numbers):
  return reduce(lcm_base, numbers, 1)

#print(lcm_list(l))

x = lcm_list(l)

for i in range(n):
  if x%l[i] == 0:
    print(0)
    exit()

ans = (m*2)//lcm_list(l)
if ans%2 == 1:
  print((ans+1)//2)
else:
  print(ans//2)

Submission status: Wrong Answer

Solution code:
n, m = map(int, input().split())
l = list(map(int, input().split()))

import fractions
from functools import reduce

def lcm_base(x, y):
  return (x * y) // fractions.gcd(x, y)

def lcm_list(numbers):
  return reduce(lcm_base, numbers, 1)

#print(lcm_list(l))

ans = (m*2)//lcm_list(l)
if ans%2 == 1:
  print((ans+1)//2)
else:
  print(ans//2)

Submission status: Wrong Answer

Solution code:
from _collections import deque
from _ast import Num


def parser():
    while 1:
        data = list(input().split(' '))
        for number in data:
            if len(number) > 0:
                yield (number)


input_parser = parser()


def gw():
    global input_parser
    return next(input_parser)


def gi():
    data = gw()
    return int(data)


MOD = int(1e9 + 7)

import numpy
from collections import deque
from math import sqrt
from math import floor
# https://atcoder.jp/contests/abc150/tasks/abc150_d
# D - Semi Common Multiple
"""

"""


def gcd(a, b):
    h = max(a, b)
    l = min(a, b)
    if h % l:
        return gcd(l, h % l)
    else:
        return l


def calc(f):
    if M < f:
        return 0
    return M // f


N = gi()
M = gi()
A = [0] * N
g = 0
for i in range(N):
    A[i] = gi()
    if i:
        g = gcd(g, A[i])
    else:
        g = A[i]

lcm = g

for a in A:
    if lcm % (a // g):  #catch!
        lcm *= (a // g)

hl = lcm // 2
n_half = calc(hl)
n_even = calc(lcm)
#print(g, lcm, n_half, n_even)

print(n_half - n_even)
# print(g, lcm)

Submission status: Wrong Answer

Solution code:
#?
n,m=map(int,input().split())
a=list(map(int,input().split()))

def dividable_with_2(x):
  cnt=0
  while x%2==0:
    x//=2
    cnt+=1
  return cnt

eg=dividable_with_2(a[0])

for q in a:
  if dividable_with_2(q) != eg:
    print(0)
    exit()

def gcd(x,y):
  if y>x:
    y,x=x,y    
  while y!=0:
    x,y=y,x%y
  return x

def lcm(x,y):
  return x*y//gcd(x,y)

d=[i//2 for i in a]
L=d[0]
for i in range(n):
  L=lcm(L,a[i])
  
if L>m:
  print(0)
  exit()

ans=(m//L+1)

print(ans)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce

def lcm_base(x, y):
    return (x * y) // fractions.gcd(x, y)

def lcm_list(numbers):
    return reduce(lcm_base, numbers, 1)

N,M = map(int,input().split())
A = list(map(int,input().split()))
LCM = lcm_list(A)
print(int(((2*M)/LCM+1)/2))

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a / 2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
#for i in range(0, len(A) - 1):
#    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
#        print(0)
#        exit(0)

# A[i] が2*偶数の場合はだめ？
for i in range(0, len(A)):
    if (A[i] / 2) % 2 == 0:
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
#print('最小半公倍数：{}'.format(min_hankobaisu))
print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a / 2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
for i in range(0, len(A) - 1):
    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
        print(0)
        exit(0)

# A[i] が2*偶数の場合はだめ？
if (A[0] / 2) % 2 == 0:
    print(0)
    exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
#print('最小半公倍数：{}'.format(min_hankobaisu))
print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a / 2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
for i in range(0, len(A) - 1):
    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
        print(0)
        exit(0)

# A[i] が2*偶数の場合はだめ？
if (A[0] / 2) % 2 == 0:
    print(0)
    exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
print('最小半公倍数：{}'.format(min_hankobaisu))
print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
from functools import reduce
from math import ceil

n, m = map(int, input().split(' '))

alist = list(map(int,input().split(' ')))
# alist = [i // 2  for i in alist]


from fractions import gcd

def getLCM(a, b):
    return a * b // gcd(a, b)

def get_lcm_for(your_list):
    return reduce(lambda x, y: getLCM(x, y), your_list)

lcmr = get_lcm_for(alist)

for a in alist:
    if (lcmr//a)%2 == 0:
        print(0)
        exit(0)

result = round((m)/(lcmr))


print(result)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a /2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
for i in range(0, len(A) - 1):
    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)

print(int(M/min_hankobaisu+1)/2)

Submission status: Wrong Answer

Solution code:
import sys
input = sys.stdin.readline

import numpy as np

n, m = map(int, input().split())
*a, = map(int, input().split()) 

a = np.array(a)
tmp = (a/2).astype(np.int)

import fractions
lcm = tmp[0]
for i in range(1, n):
    lcm = lcm * tmp[i] // fractions.gcd(lcm, tmp[i])
# print(lcm)

m = m + lcm
lcm *= 2
# print(lcm, m)
if m < lcm:
    print(0)
else:
    if m%lcm == 0:
        print(m//lcm+1)
    else:
        print(m//lcm)

Submission status: Wrong Answer

Solution code:
import sys
input = sys.stdin.readline

import numpy as np

n, m = map(int, input().split())
*a, = map(int, input().split()) 

a = np.array(a)
tmp = (a/2).astype(np.int)

import fractions
lcm = tmp[0]
for i in range(1, n):
    lcm = lcm * tmp[i] // fractions.gcd(lcm, tmp[i])
# print(lcm)

m = m + lcm
lcm *= 2
# print(lcm, m)
if m < lcm:
    print(0)
else:
    print(m//lcm)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a /2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
for i in range(0, len(A) - 1):
    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)
print(min_hankobaisu)

print(int((M // min_hankobaisu) / 2 + 0.5))

Submission status: Wrong Answer

Solution code:
from functools import reduce
from math import ceil

n, m = map(int, input().split(' '))

alist = list(map(int,input().split(' ')))
# alist = [i // 2  for i in alist]


from fractions import gcd

def getLCM(a, b):
    return a * b // gcd(a, b)

def get_lcm_for(your_list):
    return reduce(lambda x, y: getLCM(x, y), your_list)

lcmr = get_lcm_for(alist)

if (lcmr in alist):
    print(0)
    exit(0)

result = round((m)/(lcmr))


print(result)

Submission status: Wrong Answer

Solution code:
import sys
input = sys.stdin.readline

import numpy as np

n, m = map(int, input().split())
*a, = map(int, input().split()) 

a = np.array(a)
tmp = (a/2).astype(np.int)

import fractions
lcm = tmp[0]
for i in range(1, n):
    lcm = lcm * tmp[i] // fractions.gcd(lcm, tmp[i])
# print(lcm)

max_a = max(a)
if max_a%lcm == 0:
    lcm = lcm * (max_a//lcm)
else:
    lcm = lcm * (max_a//lcm+1)

if m < lcm:
    print(0)
else:
    if m%lcm == 0:
        print(m//lcm)
    else:
        print(m//lcm+1)

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

# 最小半公倍数を求める
def min_hankobaisu(A, M):
    result = 1
    for a in A:
        result = result * a /2
        if result > M:
            print(0)
            exit(0)
    return int(result)

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))
A.sort(reverse=True)
# hankobaisu_list = []

# 与えられた数値が2*奇数と2*偶数なのであれば半公倍数はない
# → その場で終了
for i in range(0, len(A) - 1):
    if (A[i] / 2 % 2) != (A[i + 1] / 2 % 2):
        print(0)
        exit(0)

# 半公倍数の最小値を求める
min_hankobaisu = min_hankobaisu(A, M)

# ある数が公倍数かどうかを求める
i = 0
for try_X in range(min_hankobaisu, M+1, min_hankobaisu*2):
#    print(try_X)
    i += 1

#print(hankobaisu_list)
print(i)

Submission status: Wrong Answer

Solution code:
def gcd(a,b):
  a,b = min(a,b),max(a,b)
  if a != 0:
    return gcd(b%a,a)
  else:
    return b

n,m = map(int,input().split())
a = list(map(int,input().split()))
a.sort(reverse=1)
g = a[0]
c = a[0]
mi = a[0]//2
for i in a[1:]:
  for j in range((m-a[0])//c+1):
    if (mi-i//2) % i == 0:
      break
    else:
      mi += c
  if mi > m:
    print(0)
    exit()
  g = gcd(i,c)
  c *= i
  c = c // g
print((m-mi)//c+1)

Submission status: Wrong Answer

Solution code:
def gcd(a,b):
  a,b = min(a,b),max(a,b)
  if a != 0:
    return gcd(b%a,a)
  else:
    return b

n,m = map(int,input().split())
a = list(map(int,input().split()))
a.sort(reverse=1)
g = a[0]
c = a[0]
mi = a[0]//2
for i in a:
  for j in range((m-a[0])//c+1):
    if (mi-i//2) % i == 0:
      break
    else:
      mi += c
  if mi > m:
    print(0)
    exit()
  g = gcd(i,c)
  c *= i
  c = c // g
print((m-mi)//c+1)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    c = 2**len(bin(a[0]).split("1")[-1])
    l = reduce(lcm, (_a if not _a % c or _a // c % 2 else 2 * m + 2 for _a in a))
    return str((m - l // 2) // l + 1) if l <= 2 * m else "0"


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
from functools import reduce
from math import ceil

n, m = map(int, input().split(' '))

alist = list(map(int,input().split(' ')))
# alist = [i // 2  for i in alist]


from fractions import gcd

def getLCM(a, b):
    return a * b // gcd(a, b)

def get_lcm_for(your_list):
    return reduce(lambda x, y: getLCM(x, y), your_list)

lcmr = get_lcm_for(alist)

result = round((m)/(lcmr))


print(result)

Submission status: Wrong Answer

Solution code:
from functools import reduce

n, m = map(int, input().split(' '))

alist = list(map(int,input().split(' ')))
alist = [i // 2  for i in alist]


from fractions import gcd

def getLCM(a, b):
    return a * b // gcd(a, b)

def get_lcm_for(your_list):
    return reduce(lambda x, y: getLCM(x, y), your_list)

lcmr = get_lcm_for(alist)

result = (m + lcmr)//(lcmr*2)


print(result)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    c = 2**len(bin(a[0]).split("1")[-1])
    l = reduce(lcm, (2 * m if _a % c or not _a // c % 2 else _a for _a in a))
    return str(max((m - l // 2) // l + 1, 0))


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    l = reduce(lcm, a)
    c = 2**len(bin(a[0])[::-1].split("1")[0])
    f = bin(a[0]).count("1") > 1
    for _a in a:
        if _a % c > 0 or (_a // c) % 2 != f:
            return "0"
    return str(max((m - l // 2) // l + 1, 0))


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    l = reduce(lcm, a)
    while a[0] % 2 == 0:
        c = a[0] % 2
        for _a in a[1:]:
            if _a % 2 != c:
                return "0"
        if not c:
            a = [_a // 2 for _a in a]
    return str(max((m - l // 2) // l + 1, 0))


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
# 問題文：長さNの偶数からなる正の整数列A=a1,a2,...,aNと、整数Mが与えられます。
#        任意のk(1≤k≤N)に対して以下の条件を満たす正の整数XをAの「半公倍数」と定義します。
#        X=ak×(p+0.5)を満たす負でない整数pが存在する。
#        1以上M以下の整数のうちのAの半公倍数の個数を求めてください。
# 入力 : 以下の形式で標準入力から与えられる。
#       N M
#       a1 a2 ... aN
# 出力 : 1 以上 M 以下の整数のうちの A の半公倍数の個数を出力せよ。

def check_hankobaisu(x,y,try_X):
    x = x/2
    y = y/2
    x_josu = 0
    y_josu = 0
    while try_X >= x:
        if try_X % x == 0:
            try_X = int(try_X / x)
            x_josu += 1
#            print('x_josuの値が増えます ：　{}'.format(x_josu))
        else:
            break
    while try_X >= y:
        if try_X % y == 0:
            try_X = int(try_X / y)
            y_josu += 1
 #           print('y_josuの値が増えます ：　{}'.format(y_josu))
        else:
            break
    if try_X == 1 and x_josu > 0 and y_josu > 0:
        return True

    return False

# 正の整数列Aの長さN, 半公倍数の上限M
N, M = map(int, input().split())

# 正の整数列A
A = list(set(list(map(int, input().split()))))

hankobaisu_list = []

for i in range(0, len(A)-1):
    x, y = A[i], A[i + 1]
    # ある数が公倍数かどうかを求める
    for try_X in range(int(x*y/4), M+1):
#        print('{}が{}と{}の半公倍数かどうか調べます'.format(try_X, x, y))
        if check_hankobaisu(x,y,try_X):
            hankobaisu_list.append(try_X)

print(len(hankobaisu_list))

Submission status: Wrong Answer

Solution code:
import numpy as np
import fractions
from functools import reduce

N,M = map(int,input().split())
A = np.array(list(map(int,input().split())))
A = A // 2

def lcmb(x,y):
    return (x*y)//fractions.gcd(x,y)
def lcm(L):
    return reduce(lcmb, L, 1)
    
T = lcm(A)

flg = False
for a in A:
    if (T//a)%2 != 0:
        flg = True
        break

m = M//T
if flg:
    ans = 0
elif m%2 == 0:
    ans = m//2
else:
    ans = m//2 + 1
print(ans)

Submission status: Wrong Answer

Solution code:
import numpy as np
import fractions
from functools import reduce

N,M = map(int,input().split())
A = np.array(list(map(int,input().split())))
A = A // 2

def lcmb(x,y):
    return (x*y)//fractions.gcd(x,y)
def lcm(L):
    return reduce(lcmb, L, 1)
    
T = lcm(A)
m = M//T
if m%2 == 0:
    ans = m//2
else:
    ans = m//2 + 1
print(ans)

Submission status: Wrong Answer

Solution code:
import fractions
def func(x, y):
  return x*y//fractions.gcd(x, y)
 
N, M=map(int, input().split())
if N==1:
  a=int(input())
  c=a//2
  if c>M:
    print(0)
  else:
    print((M-c)//(2*c)+1)
  exit()

a=list(map(int, input().split()))
b=[a[i]//2 for i in range(N)]
def f(x):
  out=0
  if x%2==0:
    x//=2
    out+=1
  return out
p=[f(b[i]) for i in range(N)]
for i in range(N-1):
  if p[0]!=p[1]:
    print(0)
    exit()

c=func(b[0], b[1])
for i in range(2, N):
  c=func(c, b[i])

if c>M/2:
  print(0)
else:
  print((M-c)//(2*c)+1)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce

N, M = map(int, input().split())
A = list(map(int, input().split()))

for a in A:
    if (a // 2) % 2 == 0:
        print (0)
        exit()

def lcm_base(x, y):
    return (x * y) // gcd(x, y)

def lcm(*numbers):
    return reduce(lcm_base, numbers, 1)

tmp = lcm(*A) // 2

ans = M // tmp

ans = (ans + 1) // 2

print (ans)

Submission status: Wrong Answer

Solution code:
import fractions
def func(x, y):
  return x*y//fractions.gcd(x, y)
 
N, M=map(int, input().split())
if N==1:
  a=int(input())
  c=a//2
  if c>M:
    print(0)
  else:
    print((M-c)//(2*c)+1)
  exit()

a=list(map(int, input().split()))
b=[a[i]//2 for i in range(N)]

c=func(b[0], b[1])
for i in range(2, N):
  c=func(c, b[i])

if c>M/2:
  print(0)
else:
  print((M-c)//(2*c)+1)

Submission status: Wrong Answer

Solution code:
# -*- coding: utf-8 -*-
import bisect
import heapq
import math
import random
import sys
from collections import Counter, defaultdict, deque
from decimal import ROUND_CEILING, ROUND_HALF_UP, Decimal
from functools import lru_cache, reduce
from itertools import combinations, combinations_with_replacement, product, permutations
from operator import add, mul, sub
from fractions import gcd

sys.setrecursionlimit(100000)
input = sys.stdin.readline
INF = 2**62-1


def read_int():
    return int(input())


def read_int_n():
    return list(map(int, input().split()))


def read_float():
    return float(input())


def read_float_n():
    return list(map(float, input().split()))


def read_str():
    return input().strip()


def read_str_n():
    return list(map(str, input().split()))


def error_print(*args):
    print(*args, file=sys.stderr)


def mt(f):
    import time

    def wrap(*args, **kwargs):
        s = time.time()
        ret = f(*args, **kwargs)
        e = time.time()

        error_print(e - s, 'sec')
        return ret

    return wrap


@mt
def slv(N, M, A):
    b = []
    for a in A:
        c = 0
        while a % 2 == 0:
            c += 1
            a //= 2
        b.append(c)
    if not all(map(lambda x: x==b[0], b)):
        return 0

    d = reduce(gcd, A)
    d = reduce(lambda x, y: x * y//gcd(x, y), A)
    ans = 0
    if M - d//2 > 0:
        ans = (M-d//2) // d
    if d // 2 < M:
        ans += 1

    return ans


def slv2(N, M, A):
    ans = set()
    A = A[:]
    a = A.pop()
    b = a // 2
    while b <= M:
        ans.add(b)
        b += a

    print(sorted(ans))
    while A:
        a = A.pop()
        b = a // 2
        tmp = set()
        while b <= M:
            tmp.add(b)
            b += a
        ans = ans & tmp
        print(sorted(tmp))
    return len(ans)

def main():
    N, M = read_int_n()
    A = read_int_n()
    print(slv(N, M, A))
    # print(slv2(N, M, A))

if __name__ == '__main__':
    main()

Submission status: Wrong Answer

Solution code:
# -*- coding: utf-8 -*-
 
import math
import itertools
import sys
import copy
import functools

# 入力
#A, B, C, D = map(int, input().split())
#L = list(map(int, input().split()))
#S = list(str(input()))
#N = int(input())
N, M = map(int, input().split())
a = list(map(int, input().split()))

def lcm(a):
  from fractions import gcd
  x = a[0]
  for i in range(1, len(a)):
      x = (x * a[i]) // gcd(x, a[i])
  return x

for i in range(N) :
  a[i] /= 2

p = lcm(a)
#print(p)

#i = 1
#cnt = 0
#while (p*i <= M) :
#  cnt += 1
#  i += 2

c = M//p
if c%2 == 1 :
  print (int((c/2)+1))
else :
  print (int(c/2))

Submission status: Wrong Answer

Solution code:
# -*- coding: utf-8 -*-
 
import math
import itertools
import sys
import copy
import functools

# 入力
#A, B, C, D = map(int, input().split())
#L = list(map(int, input().split()))
#S = list(str(input()))
#N = int(input())
N, M = map(int, input().split())
a = list(map(int, input().split()))

def lcm(a):
  from fractions import gcd
  x = a[0]
  for i in range(1, len(a)):
      x = (x * a[i]) // gcd(x, a[i])
  return x

for i in range(N) :
  a[i] /= 2

p = lcm(a)
#print(p)

i = 1
cnt = 0
while (p*i <= M) :
  cnt += 1
  i += 2

print (cnt)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce

def lcm_base(x, y):
  return (x*y)//gcd(x,y)

N, M=map(int, input().split())
A=list(map(int, input().split()))
A=[a//2 for a in A]
lcm=reduce(lcm_base, A, 1)
ans=1+(M-lcm)//(2*lcm)
if lcm>M:
  ans=0
print(ans)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce

def lcm_base(x, y):
  return (x*y)//gcd(x,y)

N, M=map(int, input().split())
A=list(map(int, input().split()))
A=[a//2 for a in A]
lcm=reduce(lcm_base, A, 1)
ans=1+(M-lcm)//(2*lcm)
print(ans)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    l = reduce(lcm, a)
    t = (a[0] // 2) % 2
    for _a in a[1:]:
        if (_a // 2) % 2 != t:
            return "0"
    return str((m - l // 2) // l + 1)


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
import fractions
def Lcm(X,Y):
  return X*(Y//fractions.gcd(X,Y))
N,M=[int(s) for s in input().split()]
ls=[int(s) for s in input().split()]
c=1
ans=1
while ls[0]%2==0:
  ls[0]//=2
  c*=2
for i in range(1,N):
  if ls[i]%c!=0:
    ans=0
    break
  else:
    ls[i]//=c
    if ls[i]%2==0:
      ans=0
      break
if ans==0:
  print(0)
else:
  lcm=1
  for e in ls:
    lcm=Lcm(lcm,e)
    if lcm*c>M:
      print(0)
      break
  else:
    x=lcm*c//2
    y=M//x+1
    #print(x)
    print(max([y//2,0]))

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    l = reduce(lcm, a)
    t = (a[0] // 2) % 2
    for _a in a[1:]:
        if (_a // 2) % 2 != t:
            return "0"
    ma = max(a)
    s = l * ((ma - 1) // l + 1)
    return str((m - s // 2) // l + 1)


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    l = reduce(lcm, a)
    ma = max(a)
    s = l
    while s < ma:
        s += l
    return str((m - s // 2) // l + 1)


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))

Submission status: Wrong Answer

Solution code:
import fractions
import functools
n, m = map(int, input().split())
*a, = map(int, input().split())

def lcm(a: int, b: int) -> int:
    return (a*b) // fractions.gcd(a, b)

while all(map(lambda x: x%2 == 0, a)):
    *a, = map(lambda x: x/2, a)

if any(map(lambda x: x%2 == 0, a)):
    print(0)
    quit()

l = functools.reduce(lcm, a)

ans = (m//l + 1)//2
print(int(ans))

Submission status: Wrong Answer

Solution code:
from fractions import gcd


def lcm(a, b):
    return a * b // gcd(a, b)


def solve(string):
    n, m, *a = map(int, string.split())
    a = sorted(a, reverse=True)
    t = (a[0] // 2) % 2
    for _a in a[1:]:
        if (_a // 2) % 2 != t:
            return "0"
    b = a[0]
    c = a[0] // 2
    for _a in a[1:]:
        if c > m:
            return "0"
        for i in range(_a):
            if (i * b + c - _a // 2) % _a == 0:
                c += i * b

                break
        b = lcm(_a, b)
    return str((m - c) // b + 1)


if __name__ == '__main__':
    import sys
    print(solve(sys.stdin.read().strip()))