《绝对素数》题解(含思路)

HALLO,大家好,我是Zac,太久没发文章了(毕竟快开学了),今天刚好有点闲,发一遍题解蹭个流量。

题目描述:

如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如 13。给定两个正整数 A,B,请求出大于等于 A、小于等于 B 的所有绝对素数。

输入格式

输入 1 行,包含两个正整数 A 和 B。保证 10<A<B<100。

输出格式

若干行,每行一个绝对素数,从小到大输出。

输入输出样例

输入

11 20

输出

11
13
17

思路:

实现函数

看完这道题,大家有没有一种感觉,就是这道题其实两个函数就搞定了(敲黑板:四级考的就是函数)。现在让我们分析一下:这两个函数的功能是什么?

其中一个函数是来实现质数判断的,而另外一个是用来交换个位和十位的位置的,但是我们还是要注意一点:第二个函数里面还要再套第一个函数,因为题里写着:

如果一个两位数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数。

所以在swap完以后,还要再进行一次质数判断:

bool is (int n) { // 质数判断
    for (int i = 2; i * i <= n; i++) { // 判断循环
        if (n % i == 0) {
            return 0; // 不是
        }
    }
    return 1; // 是
}
bool is_swap (int m) { // 进行数位交换以后再进行一次判断
    int ge, shi, sum; // 个位,十位,交换后数字
    ge = m % 10;
    shi = m / 10;
    sum = ge * 10 + shi;
    if (is(sum)) { // 判断
        return 1;
    }
    return 0;
}

主函数

主函数就没什么可说的了,正常输入以后,for(或while)循环遍历区间每一个数字,加两个函数,每次执行完输出就行了:

int main () {
    int a, b;
    cin >> a >> b;
    for (int i = a; i <= b; i++) { // 区间遍历
        if (is(i) && is_swap(i)) { // 判断绝对素数
            cout << i << endl; // 如果是就输出
        }
    }
    return 0; // 完美收官 :)
}

最后放上个AC代码:

AC代码(强迫症版,无注释):

#include <iostream>
using namespace std;
bool is (int n) {
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}
bool is_swap (int m) {
    int ge, shi, sum;
    ge = m % 10;
    shi = m / 10;
    sum = ge * 10 + shi;
    if (is(sum)) {
        return 1;
    }
    return 0;
}
int main () {
    int a, b;
    cin >> a >> b;
    for (int i = a; i <= b; i++) {
        if (is(i) && is_swap(i)) {
            cout << i << endl;
        }
    }
    return 0;
}

AC代码(懒人版):

#include <iostream>
using namespace std;
bool is(int n){
    for(int i=2;i*i<=n;i++){
        if(n%i==0)return 0;
    }
    return 1;
}
bool is_swap(int m){
    int ge,shi,sum;
    ge=m%10;
    shi=m/10;
    sum=ge*10+shi;
    if(is(sum))return 1;
    return 0;
}
int main(){
    int a,b;
    cin>>a>>b;
    for(int i=a;i<=b;i++){
        if(is(i)&&is_swap(i))cout<<i<<endl;
    }
    return 0;
}

既然看都看这里了,就给个赞呗~

(我们下期再见~)

菜单(彩蛋):

对了,家人们,谁能来帮我康康这道题:(本蒟蒻实在不会,水平较低,请谅解……)

题目描述

N 进制数指的是逢 N 进一的计数制。例如,人们日常生活中大多使用十进制计数,而计算机底层则一般使用二进制。除此之外,八进制和十六进制在一些场合也是常用的计数制(十六进制中,一般使用字母 A 至 F 表示十至十五;本题中,十一进制到十五进制也是类似的)。

在本题中,我们将给出 个不同进制的数。你需要分别把它们转换成十进制数。

输入格式

输入的第一行为一个十进制表示的整数 N。接下来 N 行,每行一个整数 K,随后是一个空格,紧接着是一个 K 进制数,表示需要转换的数。保证所有 K 进制数均由数字和大写字母组成,且不以 0 开头。保证 K 进制数合法。

保证 N≤1000;保证 2≤K≤16。

保证所有 K 进制数的位数不超过 9。

输出格式

输出 N 行,每一个十进制数,表示对应 K 进制数的十进制数值。

输入输出样例

输入 #1

2
8 1362
16 3F0

输出 #1

754
1008

 ——————————————————————————————————————————

输入 #2

2
2 11011
10 123456789

输出 #2

27
123456789

求救: 

有会的大佬请麻烦在评论区@我一下哈~

感谢各位大佬对本蒟蒻的支持!

(END)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值