from fractions import gcd
import re
defmin_special_mult(arr):
l =[e for e in arr ifnot re.match('(None)|([+-]?\d+)',str(e))]iflen(l)==1:return'There is 1 invalid entry: {}'.format(l[0])iflen(l)>1:return'There are {} invalid entries: {}'.format(len(l), l)returnreduce(lambda s, e: s *int(e)/ gcd(s,int(e))if e else s, arr,1)
答案2:
gcd =lambda a, b: a ifnot b else gcd(b, a%b)
lcm =lambda a, b: a * b / gcd(a, b)defmin_special_mult(arr):
errors =[]
xs =set()for x infilter(None, arr):try: xs.add(int(x))except: errors.append(x)ifnot errors:returnreduce(lcm, xs)ifnot errors[1:]:return"There is 1 invalid entry: %s"% errors[0]return"There are %d invalid entries: %s"%(len(errors), errors)
答案3:
defgcd(a,b):while b >0: a, b = b, a % b
return a
deflcm(a, b):return a * b / gcd(a, b)defmin_special_mult(arr):try:returnreduce(lcm,map(abs,map(int,filter(None, arr))))except:
invalid =[i for i in arr iftype(i)==strandnot i.isdigit()]iflen(invalid)==1:return"There is 1 invalid entry: %s"% invalid[0]return"There are %s invalid entries: %s"%(len(invalid), invalid)
答案4:
from fractions import gcd
from functools importreduceimport math
defmin_special_mult(arr):
a =filter(lambda x:type(x)!=int,[i for i in arr ifnotstr(i).lstrip("-").isdigit()and i!=None])
arr =[int(i)for i in arr ifstr(i).lstrip("-").isdigit()]if a:return"There {} {} invalid entr{}: {}".format("are"iflen(a)>1else"is",len(a),"ies"iflen(a)>1else"y",a iflen(a)>1else a[0])returnabs(reduce((lambda x,y : x*y/gcd(x,y)),arr))
答案5:
from fractions import gcd
defmin_special_mult(arr):defis_int(n):try:int(n)returnTrueexcept:returnFalse
orig_arr =[x for x in arr if x]
arr =[int(x)for x in orig_arr if is_int(x)]iflen(orig_arr)-len(arr)>0:
freaks =[x for x in orig_arr ifnot is_int(x)]iflen(freaks)>1:return"There are {} invalid entries: {}".format(len(freaks), freaks)return"There is 1 invalid entry: {}".format(freaks[0])
arr =[abs(x)for x in arr]returnreduce(lambda x, y: x * y // gcd(x, y), arr)
答案6:
defgcd(a,b):while b:
a,b = b,a%b
return a
deflcd(a,b):return a*b/gcd(a,b)defcheckstring(arr):
strlist =[]for elem in arr:iftype(elem)==str:
strlist.append(elem)return strlist
defconverttoint(arr):
intarray =[]for elem in arr:if elem isNone:passelse:try:
intarray.append(int(elem))except:
intarray.append(elem)return intarray
defmin_special_mult(arr):
arr = converttoint(arr)iflen(checkstring(arr))==1:return'There is 1 invalid entry: '+str(checkstring(arr)[0])eliflen(checkstring(arr))>1:return'There are '+str(len(checkstring(arr)))+' invalid entries: '+str(checkstring(arr))
current =1for elem in arr:
current = lcd(current,elem)return current
答案7:
primes =[2,3,5,7,11,13,17]defgen_primes():for p in primes:yield p
next_prime = primes[-1]
limit =int(next_prime **0.5)+1whileTrue:
next_prime +=2if limit * limit < next_prime:
limit +=2for p in primes:if next_prime % p ==0:breakif p > limit:
primes.append(next_prime)yield next_prime
breakdefgen_prime_factor_multiplicities(n):for p in gen_primes():
count =0while n % p ==0:
count +=1
n /= p
if count >0:yield(p, count)if n ==1:breakdefmin_special_mult(arr):
bad =[]
good =[]for a in arr:try:if a isnotNone:
good.append(int(a))except:
bad.append(a)if bad:iflen(bad)==1:return"There is 1 invalid entry: {}".format(bad[0])return"There are {} invalid entries: {}".format(len(bad), bad)
maxes ={}for n in good:for p, m in gen_prime_factor_multiplicities(abs(n)):
maxes[p]=max(maxes.get(p, m), m)
factors =[p ** m for p, m in maxes.iteritems()]returnreduce(lambda a, b: a * b, factors)
答案8:
defmin_special_mult(arr):#just simple "straight forward"...
narr=[]; l=[]; c=0for a in arr:if a==None:continueifisinstance(a,int): narr.append(a)else:try:ifint(a)==a: narr.append(a);continueexcept:
l.append(a); c+=1if c==1:return"There is 1 invalid entry: "+l[0]if c>0:return"There are "+str(c)+" invalid entries: "+str(l)
narr.sort(); n=narr[-1]; n1=n
whileTrue:
f=0for a inreversed(narr):if n%a!=0: f=1;breakif f==0:return n
n+=n1
答案9:
from fractions import gcd
deflcm(x, y):return x // gcd(x, y)* y
defmin_special_mult(arr):
xs =[]
invalid_entries =[]for y in arr:if y isNone:continueifisinstance(y,basestring):try:
y =int(y)except ValueError:passifnotisinstance(y,(int,long)):
invalid_entries.append(y)continue
xs.append(abs(y))if invalid_entries:iflen(invalid_entries)==1:return'There is 1 invalid entry: {}'.format(invalid_entries[0])else:return'There are {} invalid entries: {}'.format(len(invalid_entries), invalid_entries)returnreduce(lcm, xs)
答案10:
gcd=lambda a,b: a if b==0else gcd(b,a%b); min_special_mult=lambda arr:(lambda rarr:reduce(lambda a,b: a*b/gcd(a,b), rarr)iflen([x for x in arr if x!=None])==len(rarr)else(lambda err:"There is 1 invalid entry: %s"%err[0]iflen(err)==1else"There are %s invalid entries: [%s]"%(len(err),", ".join([repr(x)for x in err])))([x for x in arr iftype(x)==strandany(l notin"-0123456789"for l in x)]))([abs(int(x))for x in arr if x!=Noneand(type(x)==intorall(l in"-0123456789"for l in x))])