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:
import fractions
from functools import reduce
import math

def num_double(n):
  return int(n/2)

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

def check_even(numList):
  flag=0
  for i in range(len(numList)):
    if(numList[i]%2==0):
      pass
    else:
      flag=1
      break
  if(flag==0):
    return True
  else:
    return False

while check_even(numList)==True:
  numList=list(map(num_double,numList))
  M=math.floor(M/2)
  
def lcm_base(x, y):
    return (x * y) // fractions.gcd(x, y)

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
import math

N,M=map(int,input().split())
numList=list(map(int,input().split()))
numList=list(map(lambda x:int(x/2), numList))

def set_even(numList):
  numList=list(map(lambda x:int(x/2), numList))
  return numList

def check_even(numList):
  flag=0
  for i in range(len(numList)):
    if(numList[i]%2==0):
      pass
    else:
      flag=1
      break
  if(flag==0):
    return True
  else:
    return False

while check_even(numList)==True:
  set_even(numList)
  M=math.floor(M/2)
  
def lcm_base(x, y):
    return (x * y) // fractions.gcd(x, y)

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
import math
N,M=map(int,input().split())
M=2*M
numList=list(map(int,input().split()))

def set_even(numList):
  for i in range(len(numList)):
    numList[i]=int(numList[i]/2)
  return numList

def check_even(numList):
  flag=0
  for i in range(len(numList)):
    if(numList[i]%2==0):
      pass
    else:
      flag=1
      break
  if(flag==0):
    return True
  else:
    return False

while check_even(numList)==True:
  set_even(numList)
  M=math.floor(M/2)
  
def lcm_base(x, y):
    return (x * y) // fractions.gcd(x, y)

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M=map(int,input().split())
numList=list(map(int,input().split()))

def check_even(numList):
  flag=0
  for i in range(len(numList)):
    if(numList[i]%2==0):
      pass
    else:
      flag=1
      break
  if(flag==0):
    return True
  else:
    return False
while (check_even(numList)):
  for i in range(len(numList)):
    numList[i]=int(numList[i]/2)

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

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M=map(int,input().split())
numList=list(map(int,input().split()))

for i in range(len(numList)):
  numList[i]=int(numList[i]/2)

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

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
    continue
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M=map(int,input().split())
numList=list(map(int,input().split()))
for i in range(len(numList)):
  numList[i]=int(numList[i]/2)

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

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

endFlag=0
count=0
nowMagnification=1
nowNum=0
startNum=lcm_list(numList)

while endFlag==0:
  nowNum=startNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M=map(int,input().split())
numList=list(map(int,input().split()))
for i in range(len(numList)):
  numList[i]=int(numList[i]/2)

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

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

endFlag=0
count=0
nowMagnification=1
nowNum=lcm_list(numList)

while endFlag==0:
  nowNum=nowNum*nowMagnification
  if(1<=nowNum)and(nowNum<=M):
    count+=1
    nowMagnification+=2
  else:
    endFlag=1

print(count)

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


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
all_good = 1
for a in A:
    q = lcm // a
    if (q % 2 == 0 or lcm % a):
        all_good = 0

if all_good:
    ans = max(0, M - hl) // lcm
    if M >= hl:
        ans += 1
else:
    ans = 0
print(ans)

Submission status: Wrong Answer

Solution code:
def gcd(x,y):
    if x<y:x,y=y,x
    if y==0:return x
    return gcd(y,x%y)
N,M = map(int,input().split())
A = list(map(lambda x:int(x)//2,input().split()))
for i in range(N-1):
    A[i+1] = A[i]*A[i+1]//gcd(A[i],A[i+1])
ans = M//A[N-1]
print(ans-ans//2)

Submission status: Wrong Answer

Solution code:
def gcd(x,y):
    if x<y:x,y=y,x
    if y==0:return x
    return gcd(y,x%y)
N,M = map(int,input().split())
A = list(map(lambda x:int(x)//2,input().split()))
for i in range(N-1):
    A[i+1] = A[i]*A[i+1]//gcd(A[i],A[i+1])
ans = M//A[N-1]
print(ans//2+ans%2)

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce

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

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

NM=read_int_n()
A=read_float_n()
a=[]
for i in range(NM[0]):
  a.append(A[i]*0.5)
  
def lcm_base(x, y):
    return (x * y) // gcd(x, y)

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

lcm=lcm_list(a)

amari=NM[1]/lcm #50までは15,30,45の3つ

print(int(round(amari/2))) #3つうち奇数を切り上げ

Submission status: Wrong Answer

Solution code:
from fractions import gcd
from functools import reduce

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

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

NM=read_int_n()
A=read_float_n()
a=[]
for i in range(NM[0]):
  a.append(A[i]*0.5)
  
def lcm_base(x, y):
    return (x * y) // gcd(x, y)

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

lcm=lcm_list(a)

amari=NM[1]//lcm #50までは15,30,45の3つ

print(int(round(amari/2))) #3つうち奇数を切り上げ

Submission status: Wrong Answer

Solution code:
from fractions import gcd

N, M = map(int, input().split())
A = set(x // 2 for x in map(int, input().split()))

if any(x % 2 == 0 for x in A):
    print(0)
else:
    n = 1
    for x in A:
        g = gcd(x, n)
        n = n * x // g
    print((M // n + 1) // 2)

Submission status: Wrong Answer

Solution code:
import fractions
def func(x, y):
  tmp=fractions.gcd(x, y)
  return x*y//tmp

N, M=map(int, input().split())
if N==1:
  a=int(input())
  c=a//2
  if c>M:
    print(0)
  else:
    print(int((M/c-1)/2)+1)
  exit()

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

def f(x):
  out=0
  while x%2==0:
    out+=1
    x//=2
  return out

c=func(b[0], b[1])
for i in range(2, N):
  c=func(c, b[i])
  
p=[f(a[i]) for i in range(N)]
for i in range(N):
  print(f(a[i]))
p.sort()
for i in range(N-1):
  if p[i]!=p[i+1]:
    print(0)
    exit()
    
if c>M:
  print(0)
else:
  print(int((M/c-1)/2)+1)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M= [int(i) for i in input().split()]
n = [int(i) for i in input().split()]
#print(n)
n=sorted(set(n),reverse = True)
bs = n[0]
#print(n)
#c=len(n)


def lcm_b(a, b):
        #print("base",a,b)
        return (a * b) // fractions.gcd(a, b)

def lcm_o():
        global n
        return reduce(lcm_b, n)

def chk(v):
        global n
        for i in range(1,30):
                if v%2 == 1:break
                v = v//2
        t=2**(i-1)
        for j in range(len(n)):
                if n[j] % t == 0 and (n[j] / t) % 2 == 1:
                        n[j] = int(n[j]/t)
                else: return 0
        return i-1

if len(n) > 0:
        
        c = chk(n[-1])
        
        if  c != 0:
                v = lcm_o()*(2**(c-1))
                
                if v > M:
                        print(0) 
                else:
                        v = M//v
                        if v%2==1: v+=1
                        print(int(v//2))
        
        else: print(0)
elif N==1:
        v = int(bs*0.5)
        v = M//v
        if v%2==1: v+=1
        print(int(v//2))

Submission status: Wrong Answer

Solution code:
import fractions
def func(x, y):
  tmp=fractions.gcd(x, y)
  return x*y//tmp

N, M=map(int, input().split())
if N==1:
  a=int(input())
  c=a//2
  if c>M:
    print(0)
  else:
    print(int((M/c-1)/2)+1)
  exit()

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

def f(x):
  out=0
  while x%2==0:
    out+1
    x//=2
  return out

c=func(b[0], b[1])
for i in range(2, N):
  c=func(c, b[i])
  
p=[f(a[i]) for i in range(N)]
p.sort()
for i in range(N-1):
  if p[i]!=p[i+1]:
    print(0)
    exit()

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

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M= [int(i) for i in input().split()]
n = [int(i) for i in input().split()]
#print(n)
n=sorted(set(n),reverse = True)
bs = n[0]
#print(n)
#c=len(n)


def lcm_b(a, b):
        #print("base",a,b)
        return (a * b) // fractions.gcd(a, b)

def lcm_o():
        global n
        return reduce(lcm_b, n)

def chk(v):
        global n
        for i in range(30):
                if v%(2**i) == 1:break
                v = v//2
        t=2**(i-1)
        for j in range(len(n)):
                if n[j] % t == 0 and (n[j] / t) % 2 == 1:
                        n[j] = int(n[j]/t)
                else: return 0
        return i-1
if N > 1:                 
        c = chk(n[-1])
        if  c != 0:
                v = lcm_o()*(2**(c-1))
                
                if v > M:
                        print(0) 
                else:
                        v = M//v
                        if v%2==1: v+=1
                        print(v//2)
        
        else: print(0)
elif N==1:
        v = int(bs*0.5)
        v = M//v
        if v%2==1: v+=1
        print(v//2)

Submission status: Wrong Answer

Solution code:
import fractions
def func(x, y):
  tmp=fractions.gcd(x, y)
  return x*y//tmp

N, M=map(int, input().split())
if N==1:
  a=int(input())
  c=a//2
  if c>M:
    print(0)
  else:
    print(int((M/c-1)/2)+1)
  exit()

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

def f(x):
  out=0
  while x%2==0:
    out+1
    x//=2
  return out

c=func(b[0], b[1])
for i in range(2, N):
  c=func(c, b[i])
  
p=[f(b[i]) for i in range(N)]
p.sort()
for i in range(N-1):
  if p[i]!=p[i+1]:
    print(0)
    exit()

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

Submission status: Wrong Answer

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

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

p=[f(b[i]) for i in range(N)]
p.sort()
for i in range(N-1):
  if p[i]!=p[i+1]:
    print(0)
    exit()

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

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

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[i]!=p[i+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:
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
    #print(x)
    print(max([(M+x)//(2*x),0]))

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M= [int(i) for i in input().split()]
n = [int(i) for i in input().split()]
#print(n)
n=sorted(set(n),reverse = True)
#print(n)
#c=len(n)
 
 
def lcm_b(a, b):
        #print("base",a,b)
        return (a * b) // fractions.gcd(a, b)
 
def lcm_o():
        global n
        return reduce(lcm_b, n)
 
def chk(v):
        global n
        for i in range(30):
                #print(i,v)
                if v%(2**i) == 1:break
                v = v//2
        t=2**(i-1)
        for j in range(len(n)):
                if n[j] % t == 0 and (n[j] / t) % 2 == 1:
                        n[j] = int(n[j]/t)
                else: return 0
        return 1
 
if chk(n[-1]) == 1:
        #print(n)
        v = lcm_o()
        #print(v)
        if v > M:
                print(0) 
        else:
                v = M//v
                print((v+1)//2 if v%2 == 1 else v//2)
        
else: print(0)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M= [int(i) for i in input().split()]
n = [int(i) for i in input().split()]
print(n)
n=sorted(set(n),reverse = True)
print(n)
#c=len(n)
 
 
def lcm_b(a, b):
        #print("base",a,b)
        return (a * b) // fractions.gcd(a, b)
 
def lcm_o():
        global n
        return reduce(lcm_b, n)
 
def chk(v):
        global n
        for i in range(30):
                #print(i,v)
                if v%(2**i) == 1:break
                v = v//2
        t=2**(i-1)
        for j in range(len(n)):
                if n[j] % t == 0 and (n[j] / t) % 2 == 1:
                        n[j] = int(n[j]/t)
                else: return 0
        return 1
 
if chk(n[-1]) == 1:
        #print(n)
        v = lcm_o()
        #print(v)
        if v > M:
                print(0) 
        else:
                v = M//v
                print((v+1)//2 if v%2 == 1 else v//2)
        
else: print(0)

Submission status: Wrong Answer

Solution code:
import fractions
from functools import reduce
N,M= [int(i) for i in input().split()]
n = [int(i) for i in input().split()]
print(n)
n=sorted(set(n),reverse = True)
print(n)
#c=len(n)


def lcm_b(a, b):
        print("base",a,b)
        return (a * b) // fractions.gcd(a, b)

def lcm_o():
        global n
        return reduce(lcm_b, n)

def chk(v):
        global n
        for i in range(30):
                #print(i,v)
                if v%(2**i) == 1:break
                v = v//2
        t=2**(i-1)
        for j in range(len(n)):
                if n[j] % t == 0 and (n[j] / t) % 2 == 1:
                        n[j] = int(n[j]/t)
                else: return 0
        return 1

if chk(n[-1]) == 1:
        #print(n)
        v = lcm_o()
        #print(v)
        if v > M:
                print(0) 
        else:
                v = M//v
                print((v+1)//2 if v%2 == 1 else v//2)
        
else: print(0)

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 n_hankobaisu(M, min_hankobaisu):
    q = M // min_hankobaisu
    if q % 2 == 1:
        q += 1
    return int(q/2)

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0

    # nは最大10^9 処理速度を上げるため、2^10で割る
    for i in range(0,99999999999):
        if n >= 1024 and n % 1024 == 0:
            n = n / 1024
            i += 10
        else:
            break

    for i in range(0,9999999999999999999):
        if n > 1:
            n, mod = divmod(n, 2)
            if mod == 1:
                break
                i += 1
        else:
            break

    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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)

            if q % 2 == 1 and mod == 0:
                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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])

if N == 1:
    print(n_hankobaisu(M, min_hankobaisu(A, M)))

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

# 半公倍数の最小値を求める

# 範囲内にいくつの半公倍数があるか求める
#print('最小半公倍数：{}'.format(min_hankobaisu))
#print(int(M/min_hankobaisu)//2 + 1)
print(n_hankobaisu(M, min_hankobaisu(A, M)))

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 n_hankobaisu(M, min_hankobaisu):
    q = M // min_hankobaisu
    if q % 2 == 1:
        q += 1
    return int(q/2)

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0

    # nは最大10^9 処理速度を上げるため、2^10で割る
    for i in range(0,99999999999):
        if n >= 1024 and n % 1024 == 0:
            n = n / 1024
            i += 10
        else:
            break

    for i in range(0,9999999999999999999):
        if n > 1:
            n, mod = divmod(n, 2)
            if mod == 1:
                break
                i += 1
        else:
            break

    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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)

            if q % 2 == 1 and mod == 0:
                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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)

# 半公倍数の最小値を求める

# 範囲内にいくつの半公倍数があるか求める
#print('最小半公倍数：{}'.format(min_hankobaisu))
#print(int(M/min_hankobaisu)//2 + 1)
print(n_hankobaisu(M, min_hankobaisu(A, M)))

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 n_hankobaisu(M, min_hankobaisu):
    q = M // min_hankobaisu
    if q % 2 == 1:
        q += 1
    return int(q/2)

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0

    # nは最大10^9 処理速度を上げるため、2^10で割る
    while n > 1024:
        if n % 1024 == 0:
            n = n / 1024
            i += 10
        else:
            break
            
    while n > 1:
        n, mod = divmod(n, 2)
        if mod == 1:
            break
        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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)

            if q % 2 == 1 and mod == 0:
                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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)

# 半公倍数の最小値を求める

# 範囲内にいくつの半公倍数があるか求める
#print('最小半公倍数：{}'.format(min_hankobaisu))
#print(int(M/min_hankobaisu)//2 + 1)
print(n_hankobaisu(M, min_hankobaisu(A, M)))

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 n_hankobaisu(M, min_hankobaisu):
    q = M // min_hankobaisu
    if q % 2 == 1:
        q += 1
    return int(q/2)

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0

    # nは最大10^9 処理速度を上げるため、2^10で割る
    if n % 1024 == 0:
        n = n / 1024
        i += 10

    while n > 1:
        n, mod = divmod(n, 2)
        if mod == 1:
            break
        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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)
            if q % 2 == 1 and mod == 0:

                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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)

# 半公倍数の最小値を求める

# 範囲内にいくつの半公倍数があるか求める
#print('最小半公倍数：{}'.format(min_hankobaisu))
#print(int(M/min_hankobaisu)//2 + 1)
print(n_hankobaisu(M, min_hankobaisu(A, M)))

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 n_hankobaisu(M, min_hankobaisu):
    q = M // min_hankobaisu
    if q % 2 == 1:
        q += 1
    return int(q/2)

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0

    # nは最大10^9 処理速度を上げるため、2^10で割る
    while n > 1024:
        q, mod = divmod(n, 1024)
        if mod != 0:
            break
        n = q
        i += 10

    while n > 1:
        n, mod = divmod(n, 2)
        if mod == 1:
            break
        i += 1

 #   print('{}回2で割り切れる'.format(i))
    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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)
            if q % 2 == 1 and mod == 0:

                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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)

# 半公倍数の最小値を求める

# 範囲内にいくつの半公倍数があるか求める
#print('最小半公倍数：{}'.format(min_hankobaisu))
#print(int(M/min_hankobaisu)//2 + 1)
print(n_hankobaisu(M, min_hankobaisu(A,M)))

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 の半公倍数の個数を出力せよ。

# nが何回2で割り切れるかを求める
def nankai_2de_warikireruka(n):
    i = 0
    while n > 1:
        n, mod = divmod(n, 2)
        if mod == 1:
            break
        i += 1

 #   print('{}回2で割り切れる'.format(i))
    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)

        for j in range(1, len(A)):
            q, mod = divmod(result, A[j]/2)
            if q % 2 == 1 and mod == 0:

                # 数列要素すべての半公倍数であるので、最小半公倍数として返却する
                if j == len(A)-1:
                    return int(result)
                continue
            else:
                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)//2 + 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 の半公倍数の個数を出力せよ。

# 何回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)