Python程序:查找n的任何真因数是偶数完全平方数的概率
假设我们有一个数字n,我们需要找出n的任何真因数是偶数完全平方数的概率。
因此,如果输入像n = 36,则输出将为1/8,因为36有八个真因数,它们是{1,2,3,4,6,9,12,18},其中只有一个数字(4)是完全平方数且为偶数。
为了解决这个问题,我们将遵循以下步骤:
- 如果n模4不等于0,则
- 返回0
- 否则,
- nc := n,ptr := 2
- l := 一个新的列表
- 当ptr <= nc的平方根时,执行以下操作:
- a := 0
- 当nc模ptr等于0时,执行以下操作:
- a := a + 1
- nc := floor(nc / ptr)
- 如果a > 0,则
- 将a添加到列表l中
- ptr := ptr + 1
- 如果nc > 1,则将1添加到列表l中
- k := l[0]
- d := k + 1
- no := floor(k / 2)
- 对于l中从索引1到结尾的每个i,执行以下操作:
- d := d *(i + 1)
- no := no * floor(i / 2) + 1
- d := d - 1
- 如果n是完全平方数,则
- no := no - 1
- g := d和no的最大公约数
- d := floor(d / g)
- no := floor(no / g)
- 如果no等于0,则
- 返回0
- 否则,
- 返回分数no/d
示例
让我们看看以下实现,以便更好地理解:
from math import gcd def solve(n): if n % 4 != 0: return 0 else: nc = n ptr = 2 l = [] while ptr <= nc ** 0.5: a = 0 while nc % ptr == 0: a += 1 nc = nc / ptr if a > 0: l += [a] ptr += 1 if nc > 1: l += [1] k = l[0] d = k + 1 no = int(k / 2) for i in l[1:]: d = d * (i + 1) no *= int(i / 2) + 1 d = d - 1 if int(n ** 0.5) ** 2 == n: no -= 1 g = gcd(d, no) d = d // g no = no // g if no == 0: return 0 else: return str(no) + '/' + str(d) n = 36 print(solve(n))
输入
4, 27
输出
1/8
广告