从2至8的7个整数中随机选取2个不同的数,则这2个数互质的概率?python应用推广 图章 学习类

已认证 八彩五月 2022-11-17 311

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
最新回复 (0)
返回
首页
插件
搜索