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
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP