Hướng dẫn number of divisors python code - số ước số mã python

Cập nhật lần cuối vào ngày 19 tháng 8 năm 2022 21:50:48 [UTC/GMT +8 giờ]

Python Basic - 1: Bài tập -24 với giải pháp

Viết một chương trình Python để tìm số lượng chia của một số nguyên nhất định là chẵn hoặc kỳ lạ.

Giải pháp mẫu::

Mã Python:

def divisor[n]:
  x = len[[i for i in range[1,n+1] if not n % i]]
  return x
print[divisor[15]]
print[divisor[12]]
print[divisor[9]]
print[divisor[6]]
print[divisor[3]]

Đầu ra mẫu:

4
6
3
4
2

Trình bày bằng hình ảnh:

Flowchart:


Trực quan hóa thực thi mã Python:

Công cụ sau đây trực quan hóa những gì máy tính đang làm từng bước khi nó thực hiện chương trình đã nói:

Trình chỉnh sửa mã Python:

Có một cách khác để giải quyết giải pháp này? Đóng góp mã của bạn [và nhận xét] thông qua Disqus.

Trước đây: Viết một chương trình Python chấp nhận một số dương và trừ vào số này tổng số các chữ số của nó, v.v. Tiếp tục hoạt động này cho đến khi số dương. Write a Python program that accept a positive number and subtract from this number the sum of its digits and so on. Continues this operation until the number is positive.
Next: Write a Python program to find the digits which are absent in a given mobile number.

Mức độ khó của bài tập này là gì?

Kiểm tra kỹ năng lập trình của bạn với bài kiểm tra của W3Resource.

Python: Lời khuyên trong ngày

Tìm chỉ mục của một phần tử trong một tuple

books = ['Atomic habits', 'Ego is the enemy', 'Outliers', 'Mastery']

print[books.index['Mastery']]   # 3

Tham khảo: //bit.ly/3A1PCO4


  • Bài tập: Top 16 chủ đề phổ biến nhất hàng tuần
  • Bài tập SQL, Thực hành, Giải pháp - Tham gia
  • Bài tập SQL, Thực hành, Giải pháp - Quan sát phụ
  • JavaScript Basic - Bài tập, Thực hành, Giải pháp
  • Java Array: Bài tập, Thực hành, Giải pháp
  • C Bài tập lập trình, Thực hành, Giải pháp: Tuyên bố có điều kiện
  • Cơ sở dữ liệu nhân sự - Sắp xếp bộ lọc: Bài tập, Thực hành, Giải pháp
  • C Bài tập lập trình, Thực hành, Giải pháp: Chuỗi
  • Các loại dữ liệu Python: Từ điển - Bài tập, Thực hành, Giải pháp
  • Câu đố lập trình Python - Bài tập, Thực hành, Giải pháp
  • Mảng C ++: Bài tập, Thực hành, Giải pháp
  • Báo cáo và vòng lặp có điều kiện JavaScript - Bài tập, Thực hành, Giải pháp
  • Thuật toán cơ bản C# Sharp: Bài tập, Thực hành, Giải pháp
  • Python Lambda - Bài tập, Thực hành, Giải pháp
  • Python Pandas DataFrame: Bài tập, Thực hành, Giải pháp
  • Công cụ chuyển đổi
  • JavaScript: HTML Mẫu xác thực

  • Đăng ngày 29 tháng 7 năm 2019
  • Được gắn thẻ với toán học, python

Ở đây, một vấn đề mà tôi đã cố gắng giải quyết gần đây: đưa ra một số nguyên n, tất cả các ước số của N là gì?

Một ước số, còn được gọi là một yếu tố, là một số nguyên m phân chia đồng đều n. Ví dụ, các ước số của 12 là 1, 2, 3, 4, 6 và 12.

Cuối cùng tôi đã viết một cái gì đó với itertools và mã sử dụng một vài lý thuyết số gọn gàng. Tôi không biết nếu tôi sẽ sử dụng nó một lần nữa, nhưng tôi đã viết nó vì đó là một bài tập thú vị.

Cách tiếp cận đơn giản nhất

Nếu chúng ta muốn tìm tất cả các số chia đều n, chúng ta chỉ có thể thử mọi số lên đến n:

def get_divisors[n]:
    for i in range[1, int[n / 2] + 1]:
        if n % i == 0:
            yield i
    yield n

Chúng ta chỉ cần đi lên N/2 vì bất cứ thứ gì lớn hơn đó có thể là một ước số của N - nếu bạn chia n cho một thứ gì đó lớn hơn N/2, kết quả đã giành được một số nguyên.

Mã này rất đơn giản, và đối với các giá trị nhỏ của N, điều này là đủ tốt - nhưng nó khá kém hiệu quả và chậm. Khi N trở nên lớn hơn, thời gian chạy tăng tuyến tính. Chúng ta có thể làm tốt hơn không?

Yếu tố chính

Đối với dự án cụ thể của tôi, tôi chủ yếu làm việc với các giai thừa. Các giai thừa của N, ký hiệu là N! là sản phẩm của tất cả các số nguyên lên đến và bao gồm n. Ví dụ:

9! = 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1

Bởi vì các giai thừa có rất nhiều yếu tố nhỏ, tôi quyết định thử lấy danh sách ước tính bằng cách nhận các yếu tố nhỏ hơn trước. Cụ thể, tôi đang tìm kiếm các yếu tố chính - các yếu tố cũng là số nguyên tố. .

Ở đây, một chức năng tìm thấy các yếu tố chính của N:

def prime_factors[n]:
    i = 2
    while i * i  1:
        yield n

Điều này tương tự như chức năng ở trên, sử dụng bộ phận thử nghiệm - chúng tôi tiếp tục thử các yếu tố và nếu chúng tôi tìm thấy một, chúng tôi chia nó đi và tiếp tục. Nếu không, chúng tôi thử một số cao hơn. Đây là một cách tiếp cận khá chuẩn để tìm kiếm các yếu tố chính.

Khi chúng ta có nó, chúng ta có thể sử dụng nó để viết yếu tố chính của một số - nghĩa là viết số dưới dạng sản phẩm của các số nguyên tố. Ví dụ, yếu tố chính của 9! Là:

9! = 27 × 34 × 5 × 7

Điện toán yếu tố này là tương đối hiệu quả, đặc biệt là đối với các yếu tố giai đoạn - bởi vì các yếu tố chính là rất nhỏ, bạn không cần nhiều bộ phận được thực hiện.

Có một kết quả trong lý thuyết số được gọi là định lý cơ bản của số học trong đó nói rằng các yếu tố chính là duy nhất - đối với bất kỳ số N nào, chỉ có một cách để viết nó như một sản phẩm của các số nguyên tố. [Tôi đã thắng viết một bằng chứng ở đây, nhưng bạn có thể tìm thấy một trên Wikipedia.]

Điều này cho chúng ta một cách để tìm các ước vận - bằng cách tìm thấy tất cả các kết hợp của các yếu tố chính. Các yếu tố chính của bất kỳ ước nào của N phải là một tập hợp con của các yếu tố chính của N, hoặc nó sẽ chia n.

Đi từ một yếu tố chính đến các ước số

Đầu tiên, hãy để Lôi nhận được các yếu tố chính với tính đa dạng [các yếu tố chính và số lần mỗi yếu tố xuất hiện trong yếu tố chính]:

import collections

def get_divisors[n]:
    pf = prime_factors[n]

    pf_with_multiplicity = collections.Counter[pf]

    ...

Sau đó, hãy để Lừa đi trước và xây dựng tất cả các sức mạnh của mỗi số nguyên tố có thể xuất hiện trong một ước số có thể của N.

def get_divisors[n]:
    ...
    powers = [
        [factor ** i for i in range[count + 1]]
        for factor, count in pf_with_multiplicity.items[]
    ]

Ví dụ, cho 9! Điều này sẽ cho chúng tôi

[
    [1, 2, 4, 8, 16, 32, 64, 128],    // 2^0, 2^1, ..., 2^7
    [1, 3, 9, 27, 81],                // 3^0, 3^1, ..., 3^4
    [1, 5],
    [1, 7],
]

Sau đó, để kết hợp chúng thành các giao hàng, chúng ta có thể sử dụng sản phẩm itertools.promool khá tiện lợi, lấy một loạt các phép lặp và tạo ra tất cả các kết hợp được đặt hàng của các vòng lặp khác nhau mà nó nhận được. Nó chọn một mục từ mỗi danh sách các quyền lực chính, và sau đó bằng cách nhân chúng lại với nhau, chúng ta có được một ước số của n.

import itertools

def prod[iterable]:
    result = 1
    for i in iterable:
        result *= i
    return result

def get_divisors[n]:
    ...

    for prime_power_combo in itertools.product[*powers]:
        yield prod[prime_power_combo]

Và do đó, chúng ta có các ước số của N [mặc dù không giống như hàm ban đầu, chúng không theo thứ tự được sắp xếp].

Để tất cả chúng cùng nhau

Việc đặt tất cả lại với nhau cho chức năng này để có được các ước tính của N:

import collections
import itertools


def prime_factors[n]:
    i = 2
    while i * i  1:
        yield n


def prod[iterable]:
    result = 1
    for i in iterable:
        result *= i
    return result


def get_divisors[n]:
    pf = prime_factors[n]

    pf_with_multiplicity = collections.Counter[pf]

    powers = [
        [factor ** i for i in range[count + 1]]
        for factor, count in pf_with_multiplicity.items[]
    ]

    for prime_power_combo in itertools.product[*powers]:
        yield prod[prime_power_combo]

Việc triển khai cụ thể này rất hiệu quả khi bạn có rất nhiều yếu tố chính nhỏ, như các yếu tố mà tôi đang làm việc. Tôi không biết nó hoạt động tốt như thế nào trong trường hợp chung-và nếu bạn đang thực hiện điện toán khoa học phù hợp, tôi chắc chắn có các thói quen được tối ưu hóa, có sẵn cho loại điều này.

Nhưng như một bài tập nhỏ thú vị? Tôi rất thích nó, và thật tuyệt khi nhúng ngón chân của tôi vào lý thuyết số một lần nữa.

Làm thế nào để bạn tìm thấy số lượng ước trong Python?

Python: Tìm số lượng chia của một số nguyên nhất định là chẵn hoặc .....
Giải pháp mẫu:.
Mã Python: Divisor [n]: x = len [[i cho i trong phạm vi [1, n+1] nếu không n % i]] return x in [chia [15]] in [chia [12]][Divisor [9]] In [Divisor [6]] In [chia [3]] ....
Trình bày bằng hình ảnh:.
Sơ đồ: ... .
Trình chỉnh sửa mã Python:.

Làm thế nào để bạn tìm thấy số lượng ước?

Bây giờ, chúng tôi sẽ tính toán số lượng chia.Công thức tính toán tổng số chia của một số ′ n ′ trong đó n có thể được biểu diễn dưới dạng công suất của số nguyên tố được hiển thị là.If n = paQbrc .then tổng số chia = [a+1] [b+1] [c+1].If N=paqbrc . Then total number of divisors =[a+1][b+1][c+1].

Làm thế nào để tôi tìm thấy các ước số của một số trong Python cho Loop?

Trước tiên, người dùng phải nhập giá trị và lưu trữ nó trong một biến ..
Sử dụng một vòng lặp để tạo số từ 1 đến n ..
Sử dụng kiểm tra câu lệnh IF nếu số chia cho I đưa phần còn lại là 0, về cơ bản là chia của số nguyên ..
In các ước số của số ..

Bài Viết Liên Quan

Chủ Đề