1 条题解

  • 1
    @ 2024-11-16 21:05:14

    B3939 [GESP样题 四级] 绝对素数 题解

    一道经典的素数判断题。

    1. 绝对素数定义:如果一个两位数是素数,把它的个位与十位交换,所得的数仍是素数,那么这个数就是绝对素数

    1. 关联题目: B2028,B3840

    1. 程序部分
    • 素数判断:

      对于中间的for循环部分:

      其时间复杂度为 O(n)O(\sqrt n)

      详见:B3840题解 方法2

    bool isPrime(int n){ //在bool类型中1为真,0为假。
        if(n<2) return 0; //也可改成if(n<=1) return 0;
        for(int i=2;i*i<=n;i++){ 
            if(n%i==0) return 0; //返回假 也可改为return false;
        }
        return 1; //返回真 也可改为return ture;
    }
    
    • 数字对换:
    int n=i; 
    int x=n/10%10; //个位
    int y=n%10; //十位
    n=y*10+x;
    

    最后,附上完整代码:

    #include <bits/stdc++.h> //万能头
    using namespace std;
    bool isPrime(int n){ //已经讲过的部分,不做解释
        if(n<2) return 0;
        for(int i=2;i*i<=n;i++){
            if(n%i==0) return 0;
        }
        return 1;
    }
    int main(){
    	int a,b; //定义a,b
    	cin>>a>>b; //输入a,b
        for(int i=a;i<=b;i++){ //从a循环到b
            if(isPrime(i)==1){ //如果i是素数
                int n=i; //使n=i
                int x=n/10%10;
                int y=n%10;
                n=y*10+x;
                //上3行已经讲过,不做解释
                if(isPrime(n)==1) cout<<i<<endl; //如果n也是素数,输出i
            }
        }
    	return 0; //好习惯
    }
    
    

    第一次题解,写的不好的劳烦各位指出了。

    信息

    ID
    4955
    时间
    1000ms
    内存
    512MiB
    难度
    2
    标签
    (无)
    递交数
    2
    已通过
    2
    上传者