Đề bài: Viết chương trình liệt kê các số nguyên có 7 chữ số thoả mãn:
- Là số nguyên tố
- Tổng các chữ số của số đó là một số nguyên tố
- Các chữ số từ trái qua phải tạo thành dãy không giảm
Không biết có hướng giải quyết nào khác giúp bài này chạy nhanh hơn không, chứ code mình viết chạy tính bằng phút
bool kiemTraNguyenTo(int n)
{
if ( (n < 2) || (n % 2 == 0 && n != 2) )
{
return false;
}
for (int i = 3; i < n; i += 2)
{
if (n % i == 0)
{
return false;
}
}
return true;
}
bool kiemTraTongCacSoLaSoNguyenTo(int n)
{
int iSum = 0;
while (n != 0)
{
iSum += n % 10;
n /= 10;
}
return kiemTraNguyenTo(iSum) ? true : false;
}
bool kiemTraTangDan(int n)
{
int k = 10;
while (n != 0)
{
if (n % 10 > k)
{
return false;
}
k = n % 10;
n /= 10;
}
return true;
}
int main()
{
for (int i = 1111111; i < 100000000; i += 2)
{
if ( !kiemTraNguyenTo(i) )
{
continue;
}
if ( !kiemTraTongCacSoLaSoNguyenTo(i) )
{
continue;
}
if ( kiemTraTangDan(i) )
{
printf("\n%d", i);
}
}
return 0;
}