- vừa được xem lúc

Bài 1_Phần 3. Phân tích một số tự nhiên thành tích các thừa số nguyên tố

0 0 1

Người đăng: Vàng Văn Quyn

Theo Viblo Asia

PHÂN TÍCH MỘT SỐ TỰ NHIÊN THÀNH TÍCH CÁC THỪA SỐ NGUYÊN TỐ

I. TOÁN HỌC.

  1. Số nguyên tố là số tự nhiên lớn hơn 1, chỉ có hai ước là 1 và chính nó.
  2. Hợp số là số tự nhiên lớn hơn 1, có nhiều hơn hai ước.
  3. Mọi hợp số đều có thể phân tích được thành tích của các thừa số nguyên tố. N = a^m .b^n .c^p… Trong đó a, b, c là các số nguyên tố , thì N có tất cả số ước số là: (m + 1)(n + 1)(p + 1)…
  4. Cách phân tích hợp số thành tích của các thừa số nguyên tố
  • Ví dụ 1: Phân tích số 140 thành tích của các thừa số nguyên tố; (có phần nguyên √140=11)

Vậy, số 140 = 2.2.5.7 = 2^2.5.7

  • Ví dụ 2: Phân tích số 15 thành tích của các thừa số nguyên tố; (có phần nguyên √15=3)

Vậy số 15 = 3.5

  • Ví dụ 3: Phân tích số 21 thành tích của các thừa số nguyên tố; (có phần nguyên √21=4)

Vậy 21 = 3.7

  • Ví dụ 4: Phân tích số 450 thành tích của các thừa số nguyên tố; (có phần nguyên √450=21)

Vậy 450 = 2.3.3.5.5 = 2.3^2.5^2

II. THUẬT TOÁN PHÂN TÍCH MỘT SỐ TỰ NHIÊN N>1 THÀNH TÍCH CÁC THỪA SỐ NGUYÊN TỐ.

1) Ghi nhớ

  • Dạng phân tích ra thừa số nguyên tố của một số nguyên tố là chính nó.
  • Khi phân tích ra thừa số nguyên tố, trong kết quả thường viết các thừa số theo thứ tự từ bé đến lớn và tích các thừa số giống nhau dạng lũy thừa.

2) Nhận xét các ví dụ ở phần I (Các giá trị ở cột N và cột i):

  1. Sau mỗi lần chia hết cho số i thì giá trị của N giảm đi i lần.
  2. Gá trị của i cuối cùng >= phần nguyên căn bậc hai của N (nếu có) chính là thừa số nguyên tố cuối cùng trong phân tích. Vậy các giá trị của i từ 2 đến căn bậc hai của N.

3) Mô tả thuật toán

  • Nếu N>1
    • Lặp i = 2 đến căn bậc hai của N

    •  Trong khi N chia hết cho một số i nào đó
      
    •  N= N/i
      
    •  Xuất thừa số i
      
    •  Nếu N >= i thì thêm dấu nhân sau mỗi thừa số
      
    • Nếu N>1 thì N là thừa số nguyên tố cuối cùng trong phân tích

#include <iostream>
#include <math.h> using namespace std; void PT(int N)
{ if(N>1) { int i, can=(int)sqrt(N); for(i=2; i<=can; i++) { while(N%i==0) { N=N/i; cout<<i; if(N>=i) { cout<<"*"; } } } if(N>1) { cout<<N; } }
}
int main()
{ int N; cout<<"N= "; cin>>N; PT(N); return 0;
}

4) Dạng lũy thừa.

Để xuất ra dạng lũy thừa các thừa số, ta đếm số lượng từng thừa số. Nếu có thừa số i (dem>0) thì xuất thừa số i rồi kiểm tra tiếp nếu có từ 2 thừ số i trở lên (dem>1) thì xuất ra lũy thừa của số i và kiểm tra xem nếu vẫn còn thừa số nguyên tố tiếp theo (N>i) thì xuất dấu nhân (*), cuối cùng reset biến dem = 0 để tiếp tục đếm thừa số tiếp theo

#include <iostream>
#include <math.h> using namespace std; void PT(int N)
{ if(N>1) { int i, can=(int)sqrt(N); int dem=0; for(i=2; i<=can; i++) { while(N%i==0) { dem++; N=N/i; } if(dem>0) { cout<<i; if(dem>1) { cout<<"^"<<dem; } if(N>=i) { cout<<"*"; } dem=0; } } if(N>1) { cout<<N; } }
}
int main()
{ int N; cout<<"N= "; cin>>N; PT(N); return 0;
}

Kết quả:

5) Sử dụng mảng lưu lại kết quả phân tích.

Kết quả phân tích một số tự nhiên thành tích của các thừa số nguyên tố gồm hai phần là: Phần thừa số và phần lũy thừa (số mũ) nên lựa chọn kiểu dữ liệu pair lưu trữ cặp thừa số và số mũ tương ứng của nó, các cặp được lưu trữ vào mảng vector.

#include <iostream>
#include <math.h>
#include <vector> using namespace std; vector<pair<int,int>> PT(int N)
{ pair <int,int> p; vector<pair<int,int>> v; if(N>1) { int i, can=(int)sqrt(N); int dem=0; for(i=2; i<=can; i++) { while(N%i==0) { dem++; N=N/i; } if(dem>0) { p.first=i; p.second =dem; v.push_back(p); dem=0; } } if(N>1) { p.first=N; p.second =1; v.push_back(p); } } return v;
}
int main()
{ int N; cout<<"N= "; cin>>N; vector<pair<int,int>> v=PT(N); pair <int,int> p; int vsize=v.size(), i, luythua; for(i=0; i<vsize; i++) { p=v.at(i); cout<<p.first; luythua=p.second; if(luythua>1) { cout<<"^"<<luythua; } if(i<vsize-1) { cout<<"*"; } } return 0;
}

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học lập trình game cần những gì?

Lập trình game là làm gì. Các ngôn ngữ các bạn có thể sử dụng để lập trình game : C, C++, C#, Java, Python,... Các bước cơ bản để lập trình game. . Hiển thị: Đã là game thì hiển thị không thể thiếu, lúc đầu các bạn chỉ làm cho phần hiển thị thật đơn giản, các bạn đừng quá chú tâm vào việc làm sao ch

0 0 33

- vừa được xem lúc

[MFC] Http request with winsock2.h

Giới thiệu. Xin chào, trong bài này mình sẽ giới thiệu 1 số lưu ý khi sử dụng thư viện winsock2.h (thư viện window socket) sử dụng trong window app. Đầu tiên, bạn sẽ dễ dàng search được 1 ví dụ cụ thể trên document của winsock2.

0 0 22

- vừa được xem lúc

Design parttern

Builder. 1. Ý tưởng. Builder là một mẫu thiết kế sáng tạo cho phép bạn xây dựng các đối tượng phức tạp theo từng bước.

0 0 22

- vừa được xem lúc

Kỹ thuật viết mã nguồn hiệu quả

Kỹ thuật viết mã nguồn hiệu quả? Hôm nay bài viết này mình không đề cập tới thuật toán, hãy coi như rằng chúng ta đã có thuật toán tốt nhất có thể và bây giờ chúng ta phải làm gì để có thể tăng tính hiệu quả của code. Bài viết này mình sẽ lấy ngôn ngữ lập trình C/C++ để minh họa về các hàm, các thao

0 0 23

- vừa được xem lúc

Singleton Design pattern

Singleton Design pattern. 1. Vấn đề. - Ý tưởng:.

0 0 21

- vừa được xem lúc

So sánh Python và C++

Cuộc tranh luận giữa Python và C ++ là một chủ đề hấp dẫn vì cả hai ngôn ngữ lập trình đều rất khác nhau về cú pháp, tính đơn giản, cách sử dụng và cách tiếp cận tổng thể để lập trình. Vì vậy, mọi người cảm thấy khó khăn khi lựa chọn ngôn ngữ lập trình nào để học.

0 0 27