我需要编写一个程序来检查(a)中键入的数字及其镜像自身(a1)是否均为质数。在输入乘数10的情况下,它一直工作到这种情况,在这种情况下,它将其声明为质数,但显然不是。
我已经尝试设置条件:
if(a%10 = 0){//声明为非素数}
完成此操作后,输入数字后,我总是得到0的返回值。还尝试声明:
if(a == 1){//声明为非素数}
将其固定为10乘以100的乘数,但其余的将给我前面所述的错误。
我去找
#include <iostream>
using namespace std;
int main() {
int a, a1, DN;
cin >> a;
DN = a;
a1 = 0;
for (; a != 0;) {
a1 *= 10;
a1 = a1 + a % 10;
a /= 10;
}
int este_prim, i, este_prim2;
este_prim = 1;
i = 2;
este_prim2 = 1;
while (i < DN && i < a1) {
if (DN % i == 0) {
este_prim = 0;
}
++i;
}
if (a1 > i && a1 % i == 0) {
este_prim2 = 0;
}
++i;
if (a == 1) {
este_prim = 0;
}
if (a1 == 1) {
este_prim2 = 0;
}
if (este_prim2 == 1 && este_prim == 1) {
cout << "DA";
} else {
cout << "NU";
}
return 0;
}
我是一个完全的新手,因此我们将不胜感激。干杯!
答案 0 :(得分:1)
您的循环检查DN是否为素数,但不检查a1是否为素数。而且我不理解这段代码。
if (a1 > i && a1 % i == 0) {
este_prim2 = 0;
}
所以就删除它。
使用此有价值的帮助函数来检测正数是否为质数:
bool isPrime(int x)
{
if (x <= 1)
return false;
// 2 is the only even prime
if (x == 2)
return true;
// any other even number is not prime
if ((x % 2) == 0)
return false;
// try dividing by all odd numbers from 3 to sqrt(x)
int stop = sqrt(x);
for (int i = 3; i <= stop; i += 2)
{
if ((x % i) == 0)
return false;
}
return true;
}
然后用于检测DN
及其镜像a1
是否都是素的代码是这样的:
int main() {
int a, a1, DN;
cin >> a;
DN = a;
a1 = 0;
for (; a != 0;) {
a1 *= 10;
a1 = a1 + a % 10;
a /= 10;
}
bool este_prim, este_prim2;
este_prim = isPrime(DN);
este_prim2 = isPrime(a1);
if (este_prim2 && este_prim) {
cout << "DA";
} else {
cout << "NU";
}
}