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:
Đăng nhận xét