10 条题解

  • 7
    @ 2023-7-20 11:27:13

    第一篇题解

    好了,说正经的 审题: 1 要求输出给定范围内的素数对 2 没有,输出empty

    先得知道啥是素数对 素数:除了1和本身外没有其他因数的数 例:3,5,7 素数对:俩相差2的素数 例:3 5,5 7,11 13

    思路: 0 二话不说,上万能头

    1 定义判断素数的函数is_prime,返回布尔值 1-0 true(1) 表示这哥们儿是素数 1-1 false(0)表示这哥们儿不是素数

    2 int main()主函数 3 定义n,表示输入的数 4 重点定义布尔值变量flag=false,用来 打酱油 啊不对,是用来判断empty 5 for循环1~n 6 如果满足 i和i+2都是素数(函数返回布尔值,直接用)以及 重点:i是小于n的,i+2不一定,不加会这样

    n = 6,返回 3 5 5 7(无语……😕 ) 然后:WA(无语……😕 )(无语……😕 ) 评价:👎 👎 👎👎 👎 负五星差评 7 满足条件输出素数对 8 flag = true(很重要,记笔记) 问:啊,咋重要啊? 答:略 …………………不怎么华丽的分割线……………… 开个玩笑 flag= true表示有素数对!!! 9 判断flag,true还是false(有木有素数对) 有:躺平AC 木有:empty走起 WA是不可能WA的,这辈子都不可能WA的🚀️ TE是不可能TE的,这辈子都不可能TE的🚀️ (除非你眼瞎) (观众的臭骂声、肋骨的碎裂声) 10 return 0;结束

    
    
    #include <bits/stdc++.h>
    using namespace std;
    
    bool is_prime(int n)
    {
    if (n < 2) return false;
    for (int i = 2;i <= sqrt(n);i++)
    {
        if (n % i == 0)
            return false;
    }
    return true;
    }
    
    int main()
    {
    int n;
    bool flag = false;
    cin >> n;
    for (int i = 1;i <= n;i++)
    {
    if (is_prime(i) && is_prime(i + 2) && i + 2 <= n)
    {
    cout << i << " " << i + 2 << endl;
    flag = true;
    }
    }
    if (flag == false)
    cout << "empty";
    return 0;
    }
    
    

    都看到这了,还不那个一下(👍 👍 👍 ) ——陈哲宇 2023 07 20

  • 2
    @ 2023-7-19 11:40:41

    解析

    当i和i+2都为素数时,称它们为素数对,现在要求所有的素数对。

    题解

    #include <iostream>
    using namespace std;
    bool isP(int x)
    {
        if (x < 2)
            return 0;
        for (int i = 2; i * i <= x; i++)
            if (x % i == 0)
                return false;
        return true;
    }
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n && i + 2 <= n; i++)
            if (isP(i) && isP(i + 2))
                cout << i << " " << i + 2 << "\n";
        return 0;
    }
    
    • @ 2023-7-20 21:42:58

      还是老师的简洁明了

    • @ 2023-7-29 21:26:27

      老师,不用编写一段empty的代码吗

  • 0
    @ 2023-11-25 19:31:30
    #include <iostream>
    using namespace std;
    bool prime(int n)
    {
        if(n == 1)
        {
            return 0;
        }
        for(int i = 2;i < n;i++)
        {
            if(n % i == 0)
            {
                return 0;
            }
        }
        return 1;
    }
    int main()
    {
        int n;
        cin >> n;
        if(n < 5)
        {
            cout << "empty";
            return 0;
        }
        for (int i = 3;i <= n - 2;i++)
        {
            if(prime(i))
            {
                if(prime(i + 2))
                {
                    cout << i <<  " " << i + 2 << endl;
                }
            }
        }
        return 0;
    }
    
    • 0
      @ 2023-7-21 21:18:45

      其实我都跟不上做题进度,但是我能熬夜到23点👀️ yasuo精神,压缩宝贵的睡眠时间😄

      #include <iostream>
      bool sushu(int q){
          if(q<2) return false;
          for(int i=2;i*i<=q;i++) if(q%i==0) return false;
          return true;}
      int main(){
          int q;std::cin>>q;
          for(int i=2;i+2<=q;i++) if(sushu(i)&&sushu(i+2)) std::cout<<i<<" "<<i+2<<"\n";
          return 0;}
      
      • 0
        @ 2023-7-20 11:26:34
        #include<bits/stdc++.h>
        using namespace std;
        bool jntm(int n)
        {
            if (n<2) return false; 
            for (int i=2;i*i<=n;i++)
            {
                if (n%i==0) return false;
            }
            return true;
        }
        int main()
        {
            int n,sum=0;
            cin>>n;
            for (int j=3;j<=n;j++)
            {
                if (jntm(j) && jntm(j+2) && j+2<=n) 
                {
                    cout<<j<<" "<<j+2<<endl;
                    sum++;
                }
            }
            if (sum==0) cout<<"empty";
            return 0;
        }
        
        • 0
          @ 2023-7-19 23:44:43

          两个相差为2的质数称为质数对 如 5和7,17 和 19等, 本题目要求找出所有两个数均不大于 n 的质数对

          由题目知,与质数(素数)有关, 所以质数筛摆上

          bool prime(int n){
              if (n < 2) return false;
              for(int i = 2;i*i <= n;i++)  if(n % i == 0)  return false;
              return true;
          }
          

          易懂版本

          bool prime(int n){//定义一个布偶函数
          //布偶函数返回判断是否为质数
              if (n < 2){//质数为只有1和自己为因数的自然数
                  return false;//则1,0都不算
              }
              for(int i = 2/*大于2的数中*/;i*i <= n/*i*i和i效果一样*/;i++{
                  if(n % i == 0){//判断质数,有其它因数的不算
                      return false;//return后结束循环
                  }
              }
              return true;//都没有的即为质数
          }
          

          然后分析,质数对为两个质数 其中一个=另一个+2 用 i 表示,则为i,i+2均为质数 引用质数筛,则可简化为

          (prime(i) && prime(i+2))
          

          要求为输出1~n中的所有质数对 并且正整数 n(1≤n≤10^4)可以直接枚举 则编写主函数

          int main()
          {
              bool flag=1;//有没有质数
              int n;
              cin >> n;//输入n
              for (int i = 3/*最小的质数对:3,5*/;i+2<=n/*i+2不越界*/;i++){
                  if (prime(i) && prime(i+2))/*判断质数*/{
                      cout << i << ' ' << i+2 << endl;//成立后输出
                      flag=0;//所以范围内有质数
                  }
              }
              if (flag){//范围内没质数
                  cout << "empty";//按题意输出empty
              }
              return 0;
          
          }
          

          这里发现循环条件也可以写成这样

          for (int i = 5;i<=n/*i为更大一个的数*/;i++)
          

          则整个主函数代码可以写成

          int main()
          {
              bool flag=1;
              int n;
              cin >> n;
              for (int i = 5/*i为更大一个的数*/;i<=n;i++){
                  if (prime(i) && prime(i-2)){
                      cout << i-2 << ' ' << i << endl;
                      flag=0;//输出顺序改变
                  }
          }
          if (flag) cout << "empty";
          
          return 0;
          
          }
          

          所以再加上导入库

          #include <iostream>
          using namespace std;
          

          最终结果

          #include <iostream>
          using namespace std;
          bool prime(int n){
              if (n < 2) return false;
              for(int i = 2;i*i <= n;i++)  if(n % i == 0)  return false;
              return true;}
          int main(){
              bool flag=1;
              int n;
              cin >> n;
              for (int i = 5;i<=n;i++){
                  if (prime(i) && prime(i-2)){
                      cout << i-2 << ' ' << i << endl;
                      flag=0; } }
              if (flag) cout << "empty";
              return 0;}
          
          • @ 2023-7-20 13:20:59

            这卷的……看来我写题解也没什么用了……你牛逼

          • @ 2023-7-20 18:54:51

            好极了,卷成这样,那我就不写题解了吧.......(?

          • @ 2023-7-21 19:24:01

            @ 怎么会呢,用到电脑摸鱼写的👀️

          • @ 2023-7-23 14:52:33

            @ 👀️ 👀️ 👀️ 感觉你在嘲讽我

        • 0
          @ 2023-7-19 22:24:57
          1. 前言 我发现这道题竟然有人WA,甚至TE,忍不了了,直接上题解.
          2. 思路 由于 n 最大只到 10^4,所以我们可以直接枚举并判断。而且数据较小完全符合时间复杂度O(n*radical symbol(n))
          3. 代码 这里带着大家写代码
          • 导入头文件(TE的是不是用了万能头)
          #include <iostream>
          using namespace std;
          
          • 定义一个函数,用来判断质数的取值
          bool isprime(int n){
          	if(n==1) return false;
          	if(n==2) return true;
          	for(int i=2;i*i<=n;i++)
          		if(n%i==0) return false;	
          	return true;
          }
          

          用bool判断"T"or"F"

          • 主代码 寻思着T就接着往下跑了
          int main(){
          	int n,flag1=true,flag2;
          	cin>>n;
          	if(n<=4) {cout<<"empty";return 0;}
          	for(int i=3;i<=n-2;i+=2){
          		flag2=isprime(i+2);
          		if(flag1 && flag2 )
          			cout<<i<<" "<<i+2<<endl;
          		flag1=flag2; 
          	}
          	return 0;	
          }
          

          ok,成功完成,希望对你有用!

          END 祝你编程愉快

          • @ 2023-7-20 13:22:44

            呦,这不题解作文侠嘛?这次不够持久呀~hh……还是点个赞吧,希望能与你成为码友

        • 0
          @ 2023-7-19 22:07:01

          思路:

          根据题目可得:两个素数中的最大的那个也不大于n,所以可以写个for循环(循环变量为i)枚举两个素数种较大的那个,注意循环要从5开始,因为如果从2和3开始的话另一个数是0和1,0和1肯定不是素数

          接下来做判断:如果i和i-2都是质数,输出

          因为如果没有素数对需要输出empty,所以可以写一个用于统计素数对对数的变量,在最后判断一下,如果这个变量为0,输出empty

          判断一个数是不是素数:

          写个枚举2到 这个数 - 1的for循环,如果这里面有这个数的因数,说明这个数不是素数

          #include <iostream>
          using namespace std;
          
          bool prime(int n)
          {
              for(int i = 2;i < n;i++)
              {
                  if(n % i == 0)
                      return false;
              }
              return true;
          }
          
          int main()
          {
              int n,cnt = 0;
              cin >> n;
              for(int i = 5;i <= n;i++)
              {
                  if(prime(i) && prime(i - 2))
                  {
                      cnt++;
                      cout << i - 2 << ' ' << i <<endl;
                  }
              }
              if(cnt == 0)
                  cout << "empty";
              return 0;
          }
          ``
          
          • -1
            @ 2024-4-19 21:42:18
            #include<iostream>
            using namespace std;
            bool check(int n)//判断质数
            {
                if(n<2)
                {
                    return false;
                }
                for(int i=2;i<n;i++)
                {
                    if (n%i==0)
                    {
                        return false;
                    }
                }
                return true;
            }
            int main()
            {
                int n;
                cin >> n;
                for(int i=0;i<=n;i++)
                {
                    int a=i+2;
                    if (a<n)//处理边界
                    {
                        if(check(i) && check(a))//输出素数对
                        {
                            cout << i << " " << a << endl;
                        }
                    }
                }
                return 0;
            }
            
            • -2
              @ 2023-8-4 10:15:54
              #include<iostream>
              using namespace std;//全网最短代码
              int main()
              {
                  int sushudui[69]={0,3,5,5,7,11,13,17,19,29,31,41,43,59,61,71,73,101,103,107,109,137,139,149,151,179,181,191,193,197,199,227,229,239,241,269,271,281,283,311,313,347,349,419,421,431,433,461,463,521,523,569,571,599,601,617,619,641,643,659,661,809,811,821,823,827,829,857,859,881,883},n;
                  //定义素数对列表
                  cin >> n;
                  for(int i = 1; sushudui[i+1] <= n; i += 2)
                      cout << sushudui[i] << " " << sushudui[i + 1] << endl;
                  return 0;
              }
              
              • 1

              信息

              ID
              305
              时间
              1000ms
              内存
              128MiB
              难度
              5
              标签
              递交数
              1259
              已通过
              531
              上传者