在Python中编写程序,以找到n的任何适当约数都是偶数完全平方数的概率
假设我们有一个数字n,我们必须找出任何约数n都是偶数完全平方数的概率。
因此,如果输入为n = 36,则输出将为1/8,因为有八个36的适当约数,即{1,2,3,4,6,9,12,18},其中只有一个数字4是完全平方数并且是偶数。
为了解决此问题,我们将按照以下步骤进行 –
- 如果n mod 4与0不同,则
- 返回0
- 否则,
- nc:= n,ptr:= 2
- l:=新列表
- while ptr <=nc的平方根,do
- a:= 0
- while nc mod ptr与0相同时,do
- a:= a + 1
- nc:= (nc / ptr)的地板
- if a > 0,则
- 将a附加到列表l中
- ptr:= ptr + 1
- 如果nc > 1,则将1附加到列表l中
- k:= l [0]
- d:= k + 1
- no:= (k / 2)的地板
- 对于每个i在l [从索引1到结尾]中,do
- d:= d *(i + 1)
- no:= no * (i / 2的地板)+ 1
- d:= d-1
- 如果n是完全平方数,则
- no:= no-1
- g:= d和no的gcd
- d:= d的底数
- no:= no的底数
- 如果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))
```
## 输入
```python
4,27
输出
1/8