print("从2到8的7个整数中随机取2个不同的数,则这2个数互质的概率是多少?") #问题
def combination(start,end,step):
'''
组合数,组合则是指从给定个数的元素中仅仅取出指定个数的元素,不考虑排序。 类似于组合数C
'''
if isinstance(start and end and step,int) and start > 1: #1与任何非零自然数互质,不必研究,仅研究2及2以上的自然数
lis1 = list(range(start,end,step))
lis2 = []
for index,x in enumerate(lis1):
for y in lis1[index+1:] : #每次取2个数出来,不重复
lis2.append((x,y))
return lis2 #列出所有组合可能性
def relatively_prime(checklis):
'''
公因数只有1的两个非零自然数,叫做互质数。
1和任何非零自然数互质(此处不研究)
a不可以被b整除,并且是b与(a除以b的余数r,r不为1)也为互质数,则原来两个数也互为质数。
'''
lis3 = [] #空列表,用于保存互质数元祖
for index,item in enumerate(lis):
a = item[0]
b = item[1]
if a < b : #判断ab的大小,保持a始终为大数
a,b = b,a
r = divmod(a,b) #获得a与b的商和余数,也可以只取余数 r = a % b
if r[1] != 0: #判断余数是否为0,若为0,则整除,a,b不可能互质数,因为有最大公因数b,所以余数不能为0
if r[1] == 1 or b%r[1] != 0: #a与b余数为1,1和任何非0自然数为互质数,所以原数a,b必互质。 除数b和余数r有余数,则原数a,b必互质.
lis3.append((a,b)) #将互质元组添加到列表中
return lis3 #返回列表lis3
if __name__ == "__main__":
lis = combination(2,8,1) #限定自然数范围(起始值,结束值,步长)combination(2,20,1)表示取值范围为2到19,不包含20,步长表示相邻两数的间隔
lis3 = relatively_prime(lis) #在限定的范围内查找互质数
print("组合数个数为:",len(lis),";互质数个数为:",len(lis3),";互质数概率为",len(lis3),"/",len(lis),"≈",len(lis3)/len(lis))
print("互质列表:",lis3)
print("组合列表:",lis)
效果

使用方法:
修改变量lis即可
xiuno建站一站式服务QQ:312215120
游客您好,
登录 或
注册 后即可发表更精彩的回复!