17 条题解

  • 13
    @ 2023-7-14 17:33:30
    #include <iostream>
    using namespace std;
    int main()
    {
        int a;
        cin >> a;
        int b = 0;
        for (int i = 2; i <= a; i++)
        {
            int c = 1;
            for (int j = 2; j <= i - 1; j++)
            {
                if (i % j == 0)
                {
                    c = 0;
                    break;
                }
            }
            if (c == 1)
            {
                b++;
            }
        }
        cout << b;
        return 0;
    }
    

    解析:

    首先,这道题有手就行,欸!我手呢!?

    1.写一个 for 循环~用来枚举从 2 到 a 的每一个数!

    2.定义判断变量 c ,再写一个循环来枚举 从 2 到 i - 1 的每个数。(因为质数本来就有两个因数,我们要看还有没有其他因数)(我不喜欢 j * j,感觉逻辑容易乱😕 ,你也能写 j * j <= i)

    3.写一个判断,看看被测试的数能否被测试的因数整除。能就不是质数,将判断变量改为 0 。然后就可以跳出循环了,继续跑没意义。

    4.如果判断变量是 1 ,统计变量就 自增。

    5.输出,并点赞👍 (求你了),不然我的手就真没了!!!(QAQ)

    • 2
      @ 2024-5-22 22:02:32

      嗨嗨嗨,我双双来编题解了!!! 老话,请勿借()鉴(

      #include <iostream>
      #include <iomanip>
      #include <cstdio>
      #include <cmath>
      using namespace std;
      int main()
      {
          int a,tongji_2=0;
          cin >> a;
          for (int i=2;i<=a;i++)
          {
              int tongji_1=1;
              for (int j=2;j<=i-1;j++)
                  if (i%j==0)
                  {
                      tongji_1=0;
                      break;
                  }
              }
              if (tongji_1==1)
              {
                  tongji_2++;
              }
          }
          cout << tongji_2;
          return 0;
      }
      

      注意!!!

      1.两个变量不要设在一个int里一个设在循环外一个设在循环内否则程序会因为没初始化变量而执行到有两个素数时就不再增加程序GAME OVER

      2.注意for循环格式,切记要把i和j设为2,而不是1。程序又GAME OVER

      3.j要小于等于i-1,because一个素数的因数有它本身。程序双GAME OVER

      4.break可加可不加。

      5.你懂的...... 👍 👍 👍 👍 👍 !!!!

      作者编代码时的小趣事

      我弄出来的结果有:WA(wrong answer) CE (compile error) TLE (time long error) AC (accept correct) 甚至还有一个RTE (runtime error) 到最后我才发现我犯了除以0的错误!!!!!!!!!!

      • 2
        @ 2023-11-19 21:12:57
        #include <iostream>
        using namespace std;
        int main()
        {
            int n , sum = 0;
            cin >> n;
            for(int i = 2;i <= n;i++)
            {
                for(int j = 2;j < i;j++)
                {
                    if(i % j == 0)
                    {
                        sum++;
                        break;
                    }
                }
        
            }
            cout << n - 1 - sum;
            return 0;
        }
        
        • 1
          @ 2023-7-18 0:22:41

          思路:素数就是除了1和它本身没有其他因数的 数,1除外(参考4年级数学课本).于是我们便可以遍历1-n,看他有没有其他因数. c++代码:

          #include<bits/stdc++.h>   //from Mr.zhang
          using namespace std;
          
          int main()
          {
          	int n,f;
          	cin >> n;
          	int cnt = 0;
          		for (int i = 2; i <= n; i++)
          		{
          			f=1;
          			for(int j = 2; j <=sqrt(i); j++) //判断ing
          			{
          				if(i%j==0){
          					f=0;
          					break;   //提前退出
          				}
          			}
          			if(f){
          			//cout << i << endl ;
          			cnt++;
          			}
          		}
          	cout << cnt<< endl;  //结束qwq
          	return 0;
          }
          

          python代码,附带写入** ` 写入后文件名为质数.txt

          a = int(input())
          b = 0
          f = open('质数.txt', 'w', encoding='utf-8')
          zhi = []
          f.write('1-'+str(a)+'的质数'+'\n')
          for i in range(1,a+1):
              for j in range(i):
                  j += 2
                  if i % j == 0:
                      if i == j:
                          zhi.append(i)
                          if b == 10:
                              f.write("\n")
                              b = 0
                          f.write(str(i)+" ")
                          b += 1
                          
                      else:
                          break   
          f.close() # 当文件结束使用后记住需要关闭文件
          

          谢谢,阅读,祝你编程愉快

          • 0
            @ 2024-6-9 14:09:46

            题解 c++

            #include <bits/stdc++.h> //hetao4040809
            using namespace std;
            long long n,num;
            bool b(int x)
            {
                for(int i=2;i<x;i++)
                {
                    if(x%i==0)
                    {
                        return false;
                    }
                }
                return true;
            }
            int main()
            {
                cin>>n;
                for(long long i=2;i<=n;i++)
                {
                    if(b(i))
                    {
                        num++;
                    }
                }
                cout<<num;
                return 0;
            }
            
            • 0
              @ 2024-6-7 22:35:32
              #include<iostream>
              using namespace std;
              int main()
              {
                  int a,b = 0;
                  cin >> a;
                  for (int i = 2;i <= a;i++)
                  {
                      int sum = 0;
                      for (int j = 1;j <= i;j++)
                      {
                          if (i % j == 0)
                          {
                              sum += 1;
                          }
                      }
                      if (sum == 2)
                      {
                          b += 1;
                      }
                  }
                  cout << b;
                  return 0;
              }
              
              • 0
                @ 2024-5-26 16:16:57
                #include <bits/stdc++.h>
                using namespace std;
                int n,sum = 0;
                int main()
                {
                    cin >> n;
                    for (int i = 2; i <= n; i++)
                    {
                        int flag = 1;
                        for (int j = 2; j <= i - 1; j++)
                        {
                            if (i % j == 0)
                                flag += 1;
                        }
                        if (flag == 1)
                            sum += 1;
                    }
                    cout << sum;
                    return 0;
                }
                
                • 0
                  @ 2024-4-14 17:11:41
                  #include<iostream>
                  using namespace std;
                  int main()
                  {
                      int n,num=0;
                      cin >> n;
                      for(int i=2;i<=n;i++)
                      {
                          bool flag=true;//默认这个数是素数
                          for(int j=2;j<i;j++)//因数筛选
                          {
                              if (i%j==0)//如果这个数有其他因数
                              {
                                  flag=false;//这个数不是素数
                                  break;//不用继续判断
                              }
                          }
                          if (flag)//如果判断结果为是
                          {
                              num++;//个数加一
                          }
                      }
                      cout << num;
                      return 0;
                  }
                  看在我那么努力写题解的份上,大家点个赞呗~
                  
                  • 0
                    @ 2023-8-4 12:44:24

                    求2~n(n为大于2的正整数)中有多少个素数。


                    用循环遍历2到n的每一个数,判断并统计即可.

                    如何判断?根据素数的定义,素数只能被1和它本身整除,故用循环枚举2到该素数-1的每个数,能整除就不是素数,都不能整除就是素数.


                    代码如下,如果你用循环嵌套来判断素数,当判断出不是素数时可以用break跳出循环。👍

                    #include<bits/stdc++.h>
                    using namespace std;
                    int n,ans;
                    bool prime(int x){
                        for(int i=2;i<x;i++){if(x%i==0){return false;}}//能整除,不是素数,函数结束运行并返回结果
                        return true;//都不能整除,是素数
                    }
                    int main(){
                        cin>>n;
                        for(int i=2;i<=n;i++){if(prime(i)){ans++;}}//判断并统计
                        cout<<ans;
                        return 0;
                    }
                    
                    • 0
                      @ 2023-7-20 7:52:06
                      #include <iostream>
                      using namespace std;
                      
                      bool prime(int i)
                      {
                          if (i < 2)
                              return false;
                          for (int j = 2; j * j <= i; j++)
                          {
                              if (i % j == 0)
                              {
                                  return false;
                              }
                          }
                          return true;
                      }
                      
                      int main()
                      {
                          int n,s = 0;
                          cin>>n;
                          for(int i = 2;i<=n;i++){
                              if(prime(i)){
                                  s++;
                              }
                          }
                          cout<<s<<endl;
                          return 0;
                      }
                      

                      把代码分成两个部分,主函数部分和函数部分,先完成一个可以判断素数的函数,在计算,就简单了。

                      • 0
                        @ 2023-7-18 21:28:22

                        仅需把老师上课所讲更换一小部分代码即可

                        #include <iostream>
                        using namespace std;
                        
                        int main()
                        {
                        	long long a;
                            int ans;
                        	cin >> a;
                        	for (int i = 2;i<=a;i++)
                        	{
                        		int flag = 1;
                        		for (int j = 2;j*j<=i;j++)
                        		{
                        			if (i % j == 0)
                        			{
                        				flag = 0;
                        				break;
                        			}
                        		}
                        		if (flag == 1)
                        		{
                        			ans ++;
                        		}
                            }
                            cout << ans << endl;
                        	return 0;
                         }
                        
                        • 0
                          @ 2023-7-17 10:20:10
                          #include <iostream>
                          using namespace std;
                          int main()
                          {
                              int n, sum = 0;
                              bool flag;
                              cin >> n;
                              for (int j = n; j >= 2; j--)
                              { 
                                  flag = 1;
                                  for (int i = 2; i < j; i++)
                                  {
                                      if (j % i == 0)
                                          flag = 0;
                                  }
                                  if (flag)
                                      sum++;
                              }
                              cout << sum << endl;
                          }
                          
                          • 0
                            @ 2023-7-11 23:17:21

                            思路:

                            先枚举2-n的每一个数(设为i),然后再枚举2到i-1中每一个数(其实枚举2到根号i中的数用时更短,但我写的时候忘了),如果这中间有i的因数,就说明i不是素数。此时将默认值为0的变量state设为1,循环结束时,判断state == 0是否成立(我写的时候将表达式写成了!(state),是因为如果state等于0,那么这个表达式返回True,此时ans+1;如果state等于1,返回值为False,ans不改变),成立就将ans+1

                            #include <iostream>
                            using namespace std;
                            
                            int main()
                            {
                                int n,ans = 0; //ans这个变量用于求有几个素数
                                cin >> n;
                                for(int i = 2;i <= n;i++)
                                {
                                    int state = 0;
                                    for(int j = 2;j < i;j++)
                                    {
                                        if(i % j == 0)
                                        {
                                            state = 1;
                                            break;
                                        }
                                    }
                                    if(!(state))
                                        ans += 1;
                                }
                                cout << ans;
                                return 0;
                            }
                            
                            • 0
                              @ 2023-7-11 21:50:12
                              #include <iostream>
                              using namespace std;
                              int main()
                              {
                                  int n,h=0;
                                  cin >> n;
                                  for (int i = 2; i <= n; i++)
                                  {
                                      int flag = 1;
                                      for (int a=2;a<i;a++)
                                      {
                                          if (i%a==0)
                                          {
                                              flag=0;
                                              break;
                                          }
                                      }
                                      if (flag==1)
                                      {
                                          h+=1;
                                      }
                                  }
                                  cout<<h;
                                  return 0;
                              }
                              
                              • 0
                                @ 2023-7-11 11:28:27

                                解析

                                让i从2遍历到,如果i是素数,就计数。

                                判断素数方式:如果2~sqrt(n)中,没有任何数可以整除n,那么n就是素数。

                                题解

                                #include <iostream>
                                using namespace std;
                                int main()
                                {
                                    int n;
                                    cin >> n;
                                    int sum = 0;
                                    for (int i = 2; i <= n; i++)
                                    {
                                        int flag = 1;
                                        for (int j = 2; j * j <= i; j++)
                                        {
                                            if (i % j == 0)
                                            {
                                                flag = 0;
                                                break;
                                            }
                                        }
                                        if (flag)
                                        {
                                            sum++;
                                        }
                                    }
                                    cout << sum;
                                    return 0;
                                }
                                
                                
                                • -1
                                  @ 2023-7-18 21:27:17

                                  < ans << endl;

                                  return 0; }

                                  • -2
                                    @ 2023-11-11 22:32:18

                                    我看见好像没人用质数筛法(埃氏筛)做这道题的??? 时间复杂度比普通的做法要低一点~ 代码奉上———— 先给大家说一下埃氏筛的思路: 首先定义一个布尔数组,然后从2的倍数开始,依次将他们标记为合数,最后剩下的未被标记的就一定是素数了。

                                    #include <bits/stdc++.h>
                                    using namespace std;
                                    bool a[50005];
                                    int sum;
                                    int main()
                                    {
                                        int n;
                                        cin>>n;
                                        //埃氏筛主体过程:
                                        for(int i=2;i<=n;i++)//遍历2~n之间的所有数;
                                        {
                                            if(a[i]==false)//判断是否被标记;
                                            {
                                                for(int j=i+i;j<=n;j+=i)//进行标记;
                                                {
                                                    a[j]+=1;
                                                }
                                            }
                                        }
                                        for(int i=2;i<=n;i++)//统计素数个数;
                                        {
                                            if(a[i]==false) sum++;
                                        }
                                        cout<<sum;//输出。
                                        return 0;
                                    }
                                    

                                    不喜勿喷

                                    敬请参照

                                    • 1

                                    信息

                                    ID
                                    282
                                    时间
                                    1000ms
                                    内存
                                    128MiB
                                    难度
                                    5
                                    标签
                                    递交数
                                    1885
                                    已通过
                                    791
                                    上传者