Làm thế nào để bạn tính tổng một ước số trong python?

Viết chương trình Python để tìm tất cả các ước của một số nguyên hoặc số bằng vòng lặp for. Trong ví dụ Python này, vòng lặp for lặp từ 1 đến một số đã cho và kiểm tra xem mỗi số có chia hết cho số không. Nếu Đúng, in số đó dưới dạng ước số

num = int(input("Please enter any integer to find divisors = "))

print("The Divisors of the Number = ")

for i in range(1, num + 1):
    if num % i == 0:
        print(i)
Làm thế nào để bạn tính tổng một ước số trong python?

Chương trình Python tìm tất cả các ước của một số nguyên bằng vòng lặp while

num = int(input("Please enter any integer to find divisors = "))


i = 1

while(i <= num):
    if num % i == 0:
        print(i)
    i = i + 1
Please enter any integer to find divisors = 100

1
2
4
5
10
20
25
50
100

Trong ví dụ Python này, chúng tôi đã tạo một hàm findDivisors sẽ tìm và trả về tất cả các ước của một số đã cho

def findDivisors(num):
    for i in range(1, num + 1):
        if num % i == 0:
            print(i)
# End of Function

num = int(input("Please enter any integer to find divisors = "))

findDivisors(num)
Please enter any integer to find divisors = 500

1
2
4
5
10
20
25
50
100
125
250
500

Lưu ý rằng tôi chưa thực sự đưa ra nhiều phong cách hoặc các đề xuất khác vì bạn không yêu cầu bất kỳ. Tuy nhiên, tôi vẫn thay đổi hai điều. Đầu tiên, tôi tránh sửa đổi một biến đã nhập, vì điều này có thể gây ra những hậu quả không lường trước được, và thứ hai, tôi đổi tên của

num = int(input("Please enter any integer to find divisors = "))


i = 1

while(i <= num):
    if num % i == 0:
        print(i)
    i = i + 1
2 thành
num = int(input("Please enter any integer to find divisors = "))


i = 1

while(i <= num):
    if num % i == 0:
        print(i)
    i = i + 1
3

Thay đổi hiệu suất

Tôi nhận thấy một số tối ưu hóa mà bạn có thể thực hiện đối với mã của mình để cải thiện hiệu suất. Thay đổi đầu tiên tôi thực hiện sau khi nhận thấy rằng có một chút lặp lại không cần thiết ở một số khu vực (Xin thứ lỗi cho tôi vì hơi mơ hồ vì hiện tại là 4 giờ sáng). Với bất kỳ ước số nào của một số và chính số đó, có thể tính được ước số thứ hai. Tôi đã sử dụng thông tin này để tối ưu hóa mã cho biểu mẫu này

def proper_divisor_sum(N):
     div_sum = [1] * (N+1)
     div_sum[0], div_sum[1] = 0, 0

     for i in range(2, int(math.sqrt(N))+1):
         for j in range(i*i, N+1, i):
             div_sum[j] += i + j//i if i != j//i else i
     return div_sum

Mã này nhanh hơn khoảng 33% so với chức năng ban đầu. Ban đầu tôi nghĩ rằng tôi cần phải có một câu lệnh if trong đó để xử lý các ô vuông hoàn hảo và tính hai lần các ô vuông đó

Sau đó, tôi đã sử dụng mã này để phân tích trạng thái của từng lần lặp riêng lẻ. Đây là những gì tôi tìm thấy

[[0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1, 1,  1, 1],
 [0, 0, 0, 0, 2, 0, 5, 0, 6, 0, 7, 0, 8, 0, 9, 0, 10, 0, 11, 0, 12],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 7, 0, 0, 8, 0,  0, 9,  0, 0],
 [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,  0, 0,  0, 9]]

Điều tôi nhận thấy là các hệ số hàng đầu của mỗi hàng tiến triển tuyến tính, nhưng các hệ số theo sau tuân theo một khuôn mẫu. Tôi chắc rằng bạn có thể tự mình tìm ra các mẫu khác mà tôi đã thấy trong những con số này, nhưng điều cơ bản mà điều này cho tôi biết là giả định trước đây của tôi (về việc phải xử lý các ô vuông hoàn hảo) thực ra là một sai lầm, như tôi đã có lúc . Nhận ra điều này, tôi đã có thể đơn giản hóa mã thành dạng hiện tại


Mã nguồn

num = int(input("Enter the Number :"))
div = [1]
for i in range(2, num):
	if (num % i)==0:
		div.append(i)
print("Sum of All Divisors :",sum(div))

đầu ra

________số 8
Để tải file raw Bấm vào đây

Giả sử chúng ta được cho hai số nguyên m và a. Bây giờ n = p1(a + 1) *p2(a + 2) *. *pm(a + m), trong đó pi là số nguyên tố thứ i và i > 0. Chúng ta phải tìm giá trị của k, trong đó k = tổng các giá trị f(x) của n. Ở đây giá trị f(x) là số giá trị ước của mỗi ước của n

Vì vậy, nếu đầu vào là m = 2, a = 1, thì đầu ra sẽ là 60

  • Vì vậy, n = 2^2 x 3^3
  • n = 4 x 27
  • n = 108

Các ước của 108 là. 1, 2, 3, 4, 6, 9, 12, 18, 27, 36, 54, 108

giá trị f(x) của mỗi ước là. f(1) + f(2) + f(3) + f(4) + f(6) + f(9) + f(12) + f(18) + f(27) + f(36) +

Giả sử chúng ta có hai số p và q. Ta phải kiểm tra xem tổng các ước của các số kéo này có bằng nhau hay không

Vì vậy, nếu đầu vào là p = 559, q = 703, thì đầu ra sẽ là True các ước của 559 là 1, 13, 43 và 703 là 1, 19, 37. Tổng các ước là 57

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Định nghĩa một hàm divSum(). Điều này sẽ mất n
  • toàn bộ. = 1
  • tôi. = 2
  • trong khi i * i <= n, làm
    • nếu n chia hết cho i thì
      • toàn bộ. = tổng + i + tầng của (n / i)
    • tôi. = tôi + 1
  • trả về tổng
  • Từ phương thức chính trả về true khi divSum(p) giống với divSum(q), ngược lại là false

Chúng ta hãy xem triển khai sau đây để hiểu rõ hơn -

Mã ví dụ

Bản thử trực tiếp

from math import floor
 
def divSum(n):
   total = 1
   i = 2
   while i * i <= n:
      if n % i == 0:
         total += i + floor(n / i)
      i += 1
 
   return total
   
def solve(p, q):
   return divSum(p) == divSum(q)

p = 559
q = 703
print(solve(p, q))

Đầu vào

num = int(input("Please enter any integer to find divisors = "))


i = 1

while(i <= num):
    if num % i == 0:
        print(i)
    i = i + 1
0

đầu ra

num = int(input("Please enter any integer to find divisors = "))


i = 1

while(i <= num):
    if num % i == 0:
        print(i)
    i = i + 1
1

Làm thế nào để bạn tính tổng một ước số trong python?


Làm thế nào để bạn tính tổng một ước số trong python?

Công thức tính tổng của số chia là gì?

Hàm tổng các ước, ký hiệu là σ(n) , là tổng của tất cả các ước dương của n. σ(12)=1+2+3+4+6+12=28. Lưu ý rằng chúng ta có thể biểu diễn σ(n) dưới dạng σ(n)=∑d∣nd.

Tổng của tất cả các ước bao gồm những gì?

( 2 4 - 1 2 - 1 ) ⁢ ( 3 3 - 1 3 - 1 ) ⁢ Tổng các ước riêng bằng 6045−1800=4245 6045 - 1800 = 4245 nên ta thấy 1800 là một số dư. . Bằng chứng