sử dụng giải thuật sinh sinh số thập phân thỏa mãn các điều kiện

Hãy viết chương trình liệt kê tất cả các số tự nhiên K thỏa mãn đồng thời những điều kiện dưới đây:
(i)                K là số có 5 chữ số;
(ii)             K là số nguyên tố;
(iii)           K là số thuận nghịch (k là số thuận nghịch nếu đọc xuôi hay đọc ngược các chữ số của k ta đều nhận được một số như nhau. Ví dụ số: 30303);

(iv)            Biểu diễn của K ở hệ cơ số B ( B bất kỳ được nhập từ bàn phím cũng là một số thuận nghịch. Ví dụ số k=30303 có biểu diễn ở hệ cơ số 8 là  73137 cũng là một số thuận nghịch;
Bài giải:


#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

void xuat( int a[], int n){
 for(int i = 0; i < n; i++)
  cout << setw(1) << a[i];
 cout << endl;
}

void sinh( int a[], int n, int &ok){
 int i = n-1;
 while( i >= 0 && a[i] == 9){
  a[i] = 0;
  i--;
 }
 if( i >= 0){
  a[i] = a[i] + 1;
  }
 else ok = 0;
}

bool NguyenTo(int x) {
 if(x < 2)
  return false;
 for(int i = 2; i <= sqrt(x); i++)
  if(x % i == 0)
   return false;
 return true;
}

bool kttn(int n) {
 int m = n;
 int dao = 0 ;
 while(n > 0) {
  int t = n%10;
  dao = dao * 10 + t;
  n = n/10;
 }
 if(dao == m)
  return true;
 return false;
}

bool ktmang(int a[100], int n) {
 int i = 0;
 int j = n - 1;
 while( i < n/2) {
  if(a[i] != a[j])
   return false;
  i++;
  j--;
 }
 return true;
}

bool chuyencoso(int x, int n) {
 int a[100];
 int i = 0;
 while( n>0 ) {
  a[i] = n % x;
  n = n / x;
  i++;
 }
 if(ktmang(a,i)) return true;
 else
  return false;
}

int chuyenMangThanhSo(int a[100], int n){
 int i = 0;
 int t = 0;
 while( i < n){
   t = t +  a[i] * pow(10,n-1-i);
   i++; 
 }
 return t;
}

 
void next(int a[100], int n, int ok, int b){
 while(ok){
  int t = chuyenMangThanhSo(a, n);
  if(NguyenTo(t) && kttn(t) && chuyencoso(b,t))
    cout << t  << endl;
  sinh(a,n,ok);
 }
}

int main() {
 int n , b, ok = 1;
 int a[100] = {};
 a[1] = 1;
 cin >> n;
 cin >> b;
 next(a,n,ok,b);
 

}

Nhận xét

Bài đăng phổ biến từ blog này

Đổi chỗ chữ số đầu tiên và chữ số cuối cùng của một số

Chuyển đơn vị đo nhiệt độ C và F

Tìm số đẹp (lộc phát)