Nhiệm vụ được giao là tìm số lượng tối đa các thừa số nguyên tố duy nhất mà một số có thể có trong phạm vi [1, N] trong đó N được cho.
Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -
Đầu vào - N =100
Đầu ra - 3
Giải thích - Hãy để chúng tôi lấy 30 trong phạm vi [1, 100]
30 =3 * 2 * 5 =thừa số nguyên tố duy nhất. Do đó, trong phạm vi [1, 100] có thể tìm thấy tối đa 3 yếu tố duy nhất.
Đầu vào - N =300
Đầu ra - 4
Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau
-
Trong hàm MaxPrime (), đầu tiên chúng ta sẽ kiểm tra xem (N <2). Nếu vậy thì chỉ cần trả về 0, nếu không thì tiếp tục.
-
Sau đó, chúng tôi sẽ sử dụng sàng của Eratosthenes để tìm ra tất cả các số nguyên tố trước số N.
-
Khởi tạo hai biến pro =1 và max =0 kiểu int để lưu trữ sản phẩm và câu trả lời cuối cùng tương ứng.
-
Bên trong sàng của Eratosthenes, chúng ta sẽ nhân tập hợp các số nguyên tố đầu tiên cho đến khi tích số còn lại nhỏ hơn N bằng cách viết - pro =* p;
-
Kiểm tra xem (pro> N). Nếu vậy, hãy trả về giá trị tối đa và thêm 1 vào giá trị tối đa.
-
Bên ngoài sàng, cũng trả về giá trị tối đa.
Ví dụ
#include <bits/stdc++.h> using namespace std; int MaxPrime(int N){ if (N < 2) return 0; // Using Sieve of Eratosthenes bool Arr[N+1]; memset(Arr, true, sizeof(Arr)); int pro = 1, max = 0; for (int p=2; p*p<=N; p++){ if (Arr[p] == true){ for (int i=p*2; i<=N; i += p) Arr[i] = false; /*Multiply first set of prime numbers while product remains smaller than N*/ pro *= p; if (pro > N) return max; max++; } } return max; } //Main function int main(){ int N = 300; cout << MaxPrime(N); return 0; }
Đầu ra
Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -
4