Thứ Hai, 4 tháng 1, 2016

Số thuận nghịch

/* 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à những số nguyên tố; (iv) Tổng các chữ số của K là một số thuận nghịch hai chữ số; (v) 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); */ #include #include #include //(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à những số nguyên tố; //(iv) Tổng các chữ số của K là một số thuận nghịch hai chữ số; //(v) 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); #define _false 0 #define _true 1 //Kiểm tra số nguyên tố int is_prime(int n) { int i; if(n < 2) return _false; if(n < 4) return _true; i = 2; while(i * i <= n) { if(n % i++ == 0) return _false; } return _true; } //Tổng các chứ số của một số int sum_of_digit(int n) { char str[20]; char* p; int sum = 0; sprintf(str, "%d", n); p = str; while(*p) { sum += *p++ - 0x30; } return sum; } //Kiểm tra tính thuận nghịch của một số int is_bidirectional_number(int n) { char str[20]; int len, i; sprintf(str, "%d", n); len = strlen(str); for(i = 0; i <= len / 2; i++) { if(str[i] != str[len - i - 1]) return _false; } return _true; } //Kiểm tra mỗi chữ số có phải là số nguyên tố int is_each_digit_is_prime(int n) { char str[20], *p; if(n < 2) return _false; sprintf(str, "%d", n); p = str; while(*p) { if(!is_prime(*p++ - 0x30)) return _false; } return _true; } //Chia hết cho một số int is_divisible(int n, int factor) { return (n % factor) ? _false : _true; } //Test int main() { int i; int p = 11; for(i = 10001; i < 100000; i+= 2) // 5 chữ số { if(is_prime(i)) //là số nguyên tố { if(is_each_digit_is_prime(i)) // mỗi chữ số là số nguyên tố { int sum; sum = sum_of_digit(i); //tổng các chữ số if(is_bidirectional_number(sum)) //tổng các chữ số là một số thuận nghịch if(is_divisible(sum, p)) //tổng các chữ số chia hết cho p = 11 printf("%d\tsum: %d ::: %d\n ", i, sum, p); } } } getch(); return 0;

0 nhận xét: