如果一个自然数是素数,且它的数字位置经过左后对换后也为素数,则称为绝对素数,如13,对换后31,都是素数,所以13、31都是绝对素数。请按题意编写两个函数,判断一个数是否是绝对素数。给出的测试数据最小为2位数,最大为8位数。
函数接口定义:
//判断n是否是素数,如果是返回1,不是素数返回0
int isPrime(int n);
//将参数x反转,如x是123,则返回321
int rev(int x);
在这里解释接口参数。其中 n
是用户传入的参数, n
的值不超过int
的范围; x
是一个int数,已确定用户传入的参数一定大于等于10,小于等于99999999。
返回值: isPrime函数须返回 n
是否是素数,返回1代表是,返回0代表不是。
rev函数返回参数x的左右反转后的值,例如传入1234,返回4321。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int isPrime(int n); //判断n是否是素数,如果是返回1,不是素数返回0
int rev(int x); //将参数x反转,如x实123,则返回321
int main()
{
int n, m; //原始的数据是n,反转之后是m
scanf("%d",&n);
m =rev(n);
//如果用户输入的数是素数,反转后也是素数
if(isPrime(n) != 0 && isPrime(m) !=0 )
printf("%d==>%d: Yes", n,m);
else
printf("%d==>%d: No" ,n,m);
return 0;
}
/* 请在这里填写答案 */
输入样例1:
987
结尾无空行
输出样例1:
输出原始数据987,反转后的数789,以及是否是绝对素数。
987==>789: No
结尾无空行
输入样例2:
10321
结尾无空行
输出样例2:
10321和反转后的12301,都输素数,所以输出的Yes。
10321==>12301: Yes
结尾无空行
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int isPrime(int n)
{
int i;
for(i = 2;i < n;i++)
{
if(n%i == 0)
return 0;
}
return 1;
} //判断n是否是素数,如果是返回1,不是素数返回0
int rev(int x)
{
int x1=x,count=0,i=0;
int sum=0;
int a[10];
while(x1)//先算出x有多少位
{
x1/=10;
count++;
}
x1=x; //x1已经改变,需要重新赋值
while(x1)//从x最后一位开始,将每个数字存到数组里
{
a[i]=x1%10;
x1/=10;
i++;
}
int k=count-1;
for(i=0;i<count;i++)//翻转
{
sum=sum+pow(10,k)*a[i];
k--;
}
return sum;
}
//将参数x反转,如x实123,则返回321
int main()
{
int n, m; //原始的数据是n,反转之后是m
scanf("%d",&n);
m =rev(n);
//如果用户输入的数是素数,反转后也是素数
if(isPrime(n) != 0 && isPrime(m) !=0 )
printf("%d==>%d: Yes", n,m);
else
printf("%d==>%d: No" ,n,m);
return 0;
}
/* 请在这里填写答案 */