我想检查一个数字a
及其反面是否为素数。
必须从键盘读取该号码。
限制是:
a
没有最后一位0 以下是a
的一些示例输入和预期输出
Input Output
5 Yes
112 No
17 Yes
以下是我的尝试:
#include <iostream>
using namespace std;
int main()
{
int a;
cin>>a;
int RevNum =0;
int Remain;
int i=2;
int prim = 1;
int a_inainte = a;
if ( (1 <= a && a <= 2000000000) && (a % 10 != 0) )
{
while(a != 0)
{
Remain = a % 10;
RevNum = RevNum * 10 + Remain;
a /= 10;
}
if (i < RevNum && i< a_inainte)
{
if (RevNum % i == 0 || a_inainte % i ==0)
prim = 0;
++i;
}
if (RevNum == 1 && a_inainte == 1)
prim = 0;
if (prim == 1)
cout<<"DA";
else
cout<<"NU";
}
else
{
cout<<"NU";
}
return 0;
}
我不确定为什么但是代码块中的所有内容似乎都没问题,但我仍然没有在测试中得到所有分数(这是因为编译器检查代码的代码更多)。
答案 0 :(得分:3)
您可以编写一个简短的函数来检查数字的素数。
我在pseudocode code from Wikipedia上使用了以下代码。有关其工作原理的解释在此深入解释,但主要是为了测试数字n
是否为素数,您需要检查它是否可以被i
中的任何素数2
整除} sqrt(n)
。
bool is_prime(int n) {
if (n <= 1)
return false;
else if (n <= 3)
return true;
else if (n % 2 == 0 || n % 3 == 0)
return false;
int i = 5;
while (i*i <= n) {
if (n % i == 0 || n % (i + 2) == 0)
return false;
i += 6;
}
return true;
}
现在,您可以通过调用
来检查a
是否为素数
is_prime(a);
要检查反向是否为素数,您需要计算a
的尊重。我找到了Arslan7041 here的一个有趣的方法,它的工作方式与你现在的工作方式非常相似:
int reverse(int x) {
bool negative = false;
if(x < 0) {
negative = true;
x = -x;
}
int reversed = 0;
while(x > 0) {
reversed = reversed*10 + x%10;
x /= 10;
}
if(negative) reversed = -reversed;
return reversed;
}
现在,您可以使用以下内容检查a
的反向是否为素数:
is_prime(reverse(a));
最后,我们可以使用简单的if语句解决您的特殊限制。
if (1 <= a && a <= 2000000000 && a % 10 != 0
&& is_prime(a) && is_prime(reverse(a)) ) {
cout << "DA\n";
}
答案 1 :(得分:2)
我想你想通过将所有整数除以小于或等于这些数a来验证a的a或反向是素数,但是在代码中你只是除以i = 2和i = 3。必须迭代i。