Là số nguyên tố, từng số là nguyên tố, tổng, tích là số chia hết cho 1 số bất kì và không chứa 1 số nhập từ bàn phím

Đề bài:
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)             Mỗi chữ số của K cũng là các số nguyên tố;
(iv)              Tổng các chữ số của K là một số chia hết cho P (P được nhập từ bàn phím);
(v)                Tích các chữ số của K là một số chia hết cho Q  (Q được nhập từ bàn phím);

(vi)              Các chữ số của K không chứa số R (được nhập từ bàn phím).
Bài giải:


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

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

bool tungso(int n){
 int a[100];
 int i = 0;
 while( n > 0){
  a[i] = n %10;
  n = n / 10;
  i++;
 }
 for(int j = 0 ; j < i; j ++){
  if(!nto(a[j]))
   return false;
 }
 return true;
}

bool tongchia(int n, int x){
 int tong = 0;
 while( n > 0){
  int t = n % 10;
  tong = tong + t;
  n = n / 10;
 }
 if(tong%x == 0)
  return true;
 else 
  return false;
}

bool tichchia(int n, int x){
 int tich = 1;
 while( n > 0){
  int t = n % 10;
  tich = tich * t;
  n = n / 10;
 }
 if(tich%x == 0)
  return true;
 else 
  return false;
}

bool khacK(int n, int x){
 int a[100];
 int i = 0;
 while( n>0 ){
  a[i] = n % 10;
  n = n / 10;
  i++;
 }
 for( int j = 0 ; j < i; j++){
  if(a[j] == x)
   return false;
 }
 return true;
}

int main(){
 int p , q , r;
 cin >> p;
 cin >> q;
 cin >> r;
 for(int i = 10000; i <= 99999; i++){
  if(nto(i) && tungso(i) && tongchia(i,p) && tichchia(i,q) && khacK(i,r))
   cout << i << endl;
 }
}

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ố

Đếm số thuần nguyên tố trong một khoảng

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