1015 Reversible Primes (20 分| 素数,附详细注释,逻辑分析)

写在前面
  • 实现思路
    • 素数判断函数
    • 进制转换实现
    • 素数判断并打印输出结果
  • 英文单词
reversible prime
可逆素数

decimal system
十进位制;十进位系统

number system
数字系统;进制

radix
【数】基数;根值
  • 问题点
    • while(scanf("%d", &n) != EOF)
    • if(n<=1) return false; 非素数特例返回
  • 题目简单,15分钟a题
    • 英文单词坑
测试用例
input:
73 10
23 2
23 10
-2

output:
Yes
Yes
No
ac代码
#include <cstdio>
#include <cmath>
#include <iostream>
using namespace std;

// 判断n是否为素数
bool isPrime(int n)
{
    if(n<=1) return false;
    for(int i=2; i*i<=n; i++)
        if(n%i == 0)
            return false;
    return true;
}
int d[111];
int main()
{
    int n, radix;
    while(scanf("%d", &n) != EOF)
    {
        // 当n为负数时,退出循环
        if(n<0) break;
        scanf("%d", &radix);

        // n不是素数,输出No,结束算法
        if(isPrime(n) == false)
            printf("No\n");
        else
        {
            // n是素数,判断n在radix进制下的逆序是否是素数
            int len = 0;
            do  // 进制转换
            {
                d[len++] = n%radix;
                n/=radix;
            }
            while(n!=0);

            // 逆序转换进制
            for(int i=0; i<len; i++)
                n = n*radix + d[i];
            // 逆序是素数
            if(isPrime(n) == true)
                printf("Yes\n");
            else
                printf("No\n");
        }
    }

    return 0;
}
学习代码
  • 基本一致,不再赘述
#include <cstdio>
#include <cmath>
using namespace std;
bool isprime(int n) {
    if(n <= 1) return false;
    int sqr = int(sqrt(n * 1.0));
    for(int i = 2; i <= sqr; i++) {
        if(n % i == 0)
            return false;
    }
    return true;
}
int main() {
    int n, d;
    while(scanf("%d", &n) != EOF) {
        if(n < 0) break;
        scanf("%d", &d);
        if(isprime(n) == false) {
            printf("No\n");
            continue;
        }
        int len = 0, arr[100];
        do{
            arr[len++] = n % d;
            n = n / d;
        }while(n != 0);
        for(int i = 0; i < len; i++)
            n = n * d + arr[i];
        printf("%s", isprime(n) ? "Yes\n" : "No\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xsimah

创作不易,感谢客官的打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值