Hướng dẫn can you factor in python? - bạn có thể tính đến python không?

Mã nguồn

# Python Program to find the factors of a number

# This function computes the factor of the argument passed
def print_factors(x):
   print("The factors of",x,"are:")
   for i in range(1, x + 1):
       if x % i == 0:
           print(i)

num = 320

print_factors(num)

Đầu ra

The factors of 320 are:
1
2
4
5
8
10
16
20
32
40
64
80
160
320

Lưu ý: Để tìm các yếu tố của một số khác, hãy thay đổi giá trị của num. To find the factors of another number, change the value of num.

Trong chương trình này, số có hệ số sẽ được tìm thấy được lưu trữ trong num, được truyền đến hàm print_factors(). Giá trị này được gán cho biến X trong print_factors().

Trong hàm, chúng tôi sử dụng vòng for để lặp lại từ tôi bằng x. Nếu x hoàn toàn chia hết bởi tôi, thì đó là yếu tố của x.

Tôi đã thử thực hiện cách tiếp cận của Hugomg. Tôi đã đánh cắp chức năng "GCD" và "Đơn giản hóa phần" trực tuyến. Đây là cách tiếp cận cẩu thả của tôi:

from math import sqrt

def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

def simplify_fraction(numer, denom):
    if denom == 0:
        return "Division by 0 - result undefined"

    # Remove greatest common divisor:
    common_divisor = gcd(numer, denom)
    (reduced_num, reduced_den) = (numer / common_divisor, denom / common_divisor)
    # Note that reduced_den > 0 as documented in the gcd function.

    if common_divisor == 1:
        return (numer, denom)
    else:
        # Bunch of nonsense to make sure denominator is negative if possible
        if (reduced_den > denom):
            if (reduced_den * reduced_num < 0):
                return(-reduced_num, -reduced_den)
            else:
                return (reduced_num, reduced_den)
        else:
            return (reduced_num, reduced_den)

def quadratic_function(a,b,c):
    if (b**2-4*a*c >= 0):
        x1 = (-b+sqrt(b**2-4*a*c))/(2*a)
        x2 = (-b-sqrt(b**2-4*a*c))/(2*a)
        # Added a "-" to these next 2 values because they would be moved to the other side of the equation
        mult1 = -x1 * a
        mult2 = -x2 * a
        (num1,den1) = simplify_fraction(a,mult1)
        (num2,den2) = simplify_fraction(a,mult2)
        if ((num1 > a) or (num2 > a)):
            # simplify fraction will make too large of num and denom to try to make a sqrt work
            print("No factorization")
        else:
            # Getting ready to make the print look nice
            if (den1 > 0):
                sign1 = "+"
            else:
                sign1 = ""
            if (den2 > 0):
                sign2 = "+"
            else:
                sign2 = ""
            print("({}x{}{})({}x{}{})".format(int(num1),sign1,int(den1),int(num2),sign2,int(den2)))
    else:
        # if the part under the sqrt is negative, you have a solution with i
        print("Solutions are imaginary")
    return

# This function takes in a, b, and c from the equation:
# ax^2 + bx + c
# and prints out the factorization if there is one

quadratic_function(7,27,-4)

Nếu tôi chạy cái này, tôi sẽ nhận được đầu ra:

(7x-1)(1x+4)

Chúng tôi sẽ viết một chương trình Python có một bậc hai của mẫu Ax²+BX+C và đặt nó vào mẫu A (BX+C) (DX+E). Chương trình của chúng tôi sẽ chỉ các vấn đề về yếu tố trong đó rễ là số nguyên hoặc phân số hợp lý, ví dụ 3/4.

Chúng tôi sẽ bắt đầu bằng cách thực hiện chương trình của chúng tôi lấy 3 biến làm đầu vào và bao gồm các đầu vào để nổi số.

Bây giờ chúng tôi sẽ tạo thành bước đầu tiên của bao thanh toán, tìm mẫu số chung lớn nhất giữa ba thuật ngữ của chúng tôi. Chúng tôi sẽ viết chức năng GCD của riêng mình cùng nhau chức năng của chúng tôi về bản chất sẽ hoán đổi hai số tạo số đầu tiên mới (a) bằng B và B mới bằng B Mô đun a. Và nó sẽ tiếp tục làm điều này cho đến khi B bằng không.

Vì chức năng của chúng tôi chỉ có thể lấy GCD của hai số tại một thời điểm, chúng tôi sẽ gọi hàm GCDCALC của chúng tôi hai lần với hai số đầu tiên và một lần nữa với kết quả trước đó và số cuối cùng.

Bây giờ chúng tôi đã tìm thấy GCD, chúng tôi có khả năng bao thanh toán tứ giác có dạng đơn giản nhất. Những người mà hằng số C bằng không. Tất cả những gì chúng ta phải làm là yếu tố ra khỏi GCD và một thuật ngữ X và đầu ra kết quả.

Mã của chúng tôi cho đến khi điểm này trông giống như sau:

Bây giờ chúng ta có thể yếu tố bất kỳ bậc hai trong đó hằng số bằng không:

Nhưng chúng tôi muốn có thể làm yếu tố tất cả các loại tứ giác. Vì vậy, chúng tôi sẽ thêm một tuyên bố khác vào câu lệnh C == 0 mà chúng tôi đã viết ở trên và chúng tôi sẽ bắt đầu bằng cách tìm hai giải pháp có thể bằng phương trình bậc hai.

Lưu ý: Cả hai giải pháp trong phương trình bậc hai đều có cùng mẫu số mà tôi đã tính toán riêng.

Bây giờ chúng tôi sẽ kiểm tra xem bất kỳ giá trị nào trong số 3 giá trị của chúng tôi là không định nghĩa. Nếu vậy chúng ta biết rằng chúng ta sẽ không có một yếu tố sạch sẽ của tất cả các số nguyên nên chúng ta muốn hủy bỏ nhân tố tiên quyết.

Bước cuối cùng của chúng tôi sẽ là tìm GCD giữa tử số và mẫu số của chúng tôi để chúng tôi có thể giảm các phân số của chúng tôi xuống.

Bây giờ chúng tôi muốn tạo các tử số/mẫu số của giải pháp của chúng tôi, lưu ý rằng chúng tôi sẽ lấy âm của tử số vì công thức bậc hai cung cấp cho chúng tôi Rễ X = X_1 hoặc X_2 nhưng chúng tôi muốn đặt nó ở dạng X-X_1 = 0 hoặc x-x_2 = 0 vì vậy chúng tôi sẽ lấy âm của tử số của chúng tôi.

Bây giờ chúng tôi sẽ in ra bậc hai được bảo hiểm của chúng tôi

Lưu ý rằng chúng tôi đang nhân GCD với A/ABS (A) để đảm bảo rằng chúng tôi có cùng dấu hiệu với a.

Mã đã hoàn thành của chúng tôi bây giờ trông giống như sau:

Bây giờ chúng ta có thể kiểm tra nó:

Chúng ta cũng có thể thử một số bậc hai khác:

Nhưng loại +- làm phiền tôi nên tôi sẽ viết một hàm sẽ hiển thị đúng dấu hiệu:

Bây giờ tôi sẽ sửa đổi hai câu lệnh in của mình để sử dụng chức năng của mình:

Bây giờ đầu ra của chúng tôi trông giống như sau:

Đây là một bản sao của mã chúng tôi đã viết cùng nhau:

def displayNum(x):
if x>0:
return " + "+str(x)
elif x==0:
return ""
else:
return " - "+str(abs(x))
print("please enter your variable values assuming the form ax^2+bx+c")
a=float(input("a: "))
b=float(input("b: "))
c=float(input("c: "))
def gcdCalc(a,b):
while b:
temp=a
a = b
b=temp%b
return abs(a)
gcdTemp=gcdCalc(a,b)
gcd=gcdCalc(gcdTemp,c)
if c==0:
print(str(gcd)+"x("+str(a/gcd)+"x"+displayNum(b/gcd)+")")
else:
sol1Numerator=-b+(b**2-4*a*c)**(1/2)
sol2Numerator=-b-(b**2-4*a*c)**(1/2)
denom=2*a

if not (sol1Numerator.is_integer() and sol2Numerator.is_integer()) or not denom.is_integer():
print("no clean factorization")

else:
sol1Gcd=gcdCalc(sol1Numerator,denom)
sol2Gcd=gcdCalc(sol2Numerator,denom)
sol1Numerator=-sol1Numerator/sol1Gcd
sol1Denominator=denom/sol1Gcd
sol2Numerator=-sol2Numerator/sol2Gcd
sol2Denominator=denom/sol2Gcd

print(str(gcd*a/abs(a))+"("+str(sol1Denominator)+"x"+displayNum(sol1Numerator)+")("+str(sol2Denominator)+"x"+displayNum(sol2Numerator)+")")