Trong bài toán này, chúng ta được cho một số N. Nhiệm vụ của chúng ta là in tất cả các điểm nguyên tố của một số, nếu không thì in -1, nếu không có điểm nguyên tố.
Điểm chính là những giá trị chỉ số chia số thành hai số nguyên tố, một ở bên trái và một ở bên phải.
Hãy lấy một ví dụ để hiểu vấn đề
Input: 2359 Output: 1
Giải thích :khi tách số ở chỉ số 1. Chúng ta sẽ nhận được 2 và 59 là hai số nguyên tố.
Để giải quyết vấn đề này, chúng tôi sẽ kiểm tra xem có thể phân chia trái-phải cho số hay không. Nếu hợp lệ, chúng tôi sẽ thử tất cả các kết hợp số có thể được tạo và kiểm tra xem chúng có phải là số nguyên tố hay không. Nếu chúng là số nguyên tố, hãy in chỉ mục.
Đoạn mã dưới đây cho thấy việc triển khai giải pháp của chúng tôi
Ví dụ
#include <bits/stdc++.h> using namespace std; int countDigits(int n) { int count = 0; while (n > 0){ count++; n = n/10; } return count; } int checkPrime(int n) { if (n <= 1) return -1; if (n <= 3) return 0; if (n%2 == 0 || n%3 == 0) return -1; for (int i=5; i*i<=n; i=i+6) if (n%i == 0 || n%(i+2) == 0) return -1; return 0; } void primePoints(int n) { int count = countDigits(n); if (count==1 || count==2){ cout << "-1"; return; } bool found = false; for (int i=1; i<(count-1); i++){ int left = n / ((int)pow(10,count-i)); int right = n % ((int)pow(10,count-i-1)); if (checkPrime(left) == 0 && checkPrime(right) == 0){ cout<<i<<"\t"; found = true; } } if (found == false) cout << "-1"; } int main() { int N = 2359; cout<<"All prime divisions of number "<<N<<" are :\n"; primePoints(N); return 0; }
Đầu ra
All prime divisions of number 2359 are : 1