11 条题解

  • 14
    @ 2023-7-20 12:16:49
    #include <iostream>
    using namespace std;
    bool prime(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, a;
        cin >> n;
        a = 0;
        for (int i = 1; i <= n; i++)
        {
            int j = n - i;
            if (prime(i) && prime(j))
            {
                if ((i * j) > a)
                {
                    a = i * j;
                } 
            }
        }
        cout << a;
        return 0;
    }
    

    失踪人口回归!

    1.先写一个布尔类型的自定义函数!用于判断参数是否为质数。(至于为什么不详细讲该函数,因为我懒 当然是因为上课用了很多遍了,懒得再讲 大家肯定都会了!)

    2.定义输入变量 n 和 统计变量 a !因为 a 要储存最大的质数积,所以我们先将 a 定义的小一点。

    3.用 for 循环遍历从 1 到 n 的所有数字,再用变量 j 存储 n - i 的差。

    4.我们用自定义 prime 函数判断 i 和 j 是不是质数,因为题目要求的是两个质数,所以必须 i 和 j 都是质数才能进行下一步。

    5.判断 i 和 j 的和是否大于统计变量 a 如果是就将 i * j 赋值给变量 a 。

    6.最后将输出(统计)变量 a 输出。

    7.点点赞吧!👍 每一个赞都是我前进的动力!

    • 3
      @ 2023-7-19 23:07:52

      yasou👀️ 转为复制而生👍

      #include <iostream>
      bool zisu(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 q,ans;std::cin>>q;ans=0;
          for(int i=1;i<=q;i++)if(zisu(i)&&zisu(q-i))ans=std::max(ans,i*(q-i));
          std::cout<<ans<<"\n";return 0;}
      
      • 2
        @ 2023-7-19 21:06:41
        #include <bits/stdc++.h>
        using namespace std;
        bool isprime(int a){
            int flag=2;
        	if (a==1) flag=1;
        	for (long long i=2;i*i<=a;i++){
        	    if (a%i==0){
        			flag=3;
        			break;
        		} 
        	}
        	if (flag==2) return true;
        	else return false;
        }
        int main(){
        	int n,maxn=0;
            cin>>n;
            for (int i=1;i<=n;i++){
        		if (isprime(n-i)&&isprime(i)){
        			if (i*(n-i)>maxn) maxn=i*(n-i);
        		}
        	}
        	cout<<maxn;
            return 0;
        }
        
        
        

        #include <bits/stdc++.h> using namespace std; bool isprime(int a){ int flag=2; if (a1) flag=1; for (long long i=2;i*i<=a;i++){ if (a%i0){ flag=3; break; } } if (flag==2) return true; else return false; } int main(){ int n,maxn=0; cin>>n; for (int i=1;i<=n;i++){ if (isprime(n-i)&&isprime(i)){ if (i*(n-i)>maxn) maxn=i*(n-i); } } cout<<maxn; return 0; }

        
        
        • 2
          @ 2023-7-19 11:54:39
          #include <iostream>
          using namespace std;
          int main()
          {
              int a,b,c,m=-1,f;
              cin>>a;
              for (int i=3;i<=a/2+1;i++)
              {
                  b=i;
                  c=a-i;
                  f=1;
                  for (int q=2;q<=b-1;q++)
                  {
                      if (b%q==0)   
                      {
                          f=0;
                          break;
                      }
                  }
                  for (int h=2;h<=c-1;h++)
                  {
                      if (c%h==0)   
                      {
                          f=0;
                          break;
                      }
                  }
                  if (f==1)
                  {
                      if (c*b>m)
                          m=c*b;
                  }
              }
              cout<<m;
              return 0;
          }//这节课没学,先做一下。听说是用函数,但没学。
          
          • 2
            @ 2023-7-19 11:36:29

            解析

            输入一个数n,将n分成两个数i和j,要求i和j都是素数,求i*j的乘积最大值

            枚举i的可能情况,判断每一种情况下,i和j是不是都是素数,并维护乘积最大值。

            题解

            #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, ans;
                cin >> n;
                ans = 0;
                for (int i = 1; i <= n; i++)
                {
                    int j = n - i;
                    if (isP(i) && isP(j))
                        ans = max(ans, i * j);
                }
                cout << ans << "\n";
                return 0;
            }
            
            
            • 1
              @ 2023-8-5 19:14:28

              `` #include <bits/stdc++.h> using namespace std; bool prime(int (n)) { if (n<2)return false; for(int i=2;ii<=n;i++){ if (n%i0)return false; }return true; } int main() { int s; cin>>s; if (s%20) { if (prime(s/2)) {cout<<(s/2)(s/2); return 0;} else { int i=s/2,i2=s/2; while (prime(i)!=1||prime(i2)!=1) { i--;i2++;

                      }
                      cout<<i*i2;
                      return 0;
                  }
              }
              else{
                  {
                      int i=s/2,i2=s/2;
                      while (prime(i)!=1||prime(i2)!=1)
                      {
                          i--;i2++;
              
                      }
                      cout<<i*i2;
                      return 0;
                  }
              }
              

              } ``

              不知道是不是能提供一个新思路·

              
              
              • 1
                @ 2023-7-20 17:34:31

                1.先写一个布尔类型的自定义函数!用于判断参数是否为质数。

                2.定义输入变量 s和 统计变量 maxn !因为 maxn 要储存最大的质数积,所以我们先将 maxn 定义的小一点。

                3.用 for 循环遍历从 1 到 s 的所有数。

                4.我们用自定义 prime 函数判断 j和 s - j是不是质数,因为题目要求的是两个质数,所以必须 j和 s - j都是质数才能进行下一步。

                5.判断 j和 s - j的乘积是否大于统计变量 maxn 如果是就将 j和 s - j 的乘积赋值给变量 maxn 。

                6.最后将输出(统计)变量 maxn 输出。

                点点“亿”赞吧!👍 !~~

                #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 s,maxn = -1;
                    cin >> s;
                    for (int j = 1;j <= s;j++)
                      if (prime(j) && prime(s - j))
                         if (maxn < j * (s - j))
                            maxn = j*(s - j);
                   cout << maxn;
                   return 0; 
                }
                
                • 1
                  @ 2023-7-20 10:52:54
                  #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 s,maxn=-1;
                      cin>>s;
                      for (int j=2;j<=s-2;j++)
                      {
                          int k=s-j;
                          if (jntm(j) && jntm(k))
                          {
                              if (j*k>maxn) maxn=j*k;
                          }
                      }
                      cout<<maxn;
                      return 0;
                  }
                  
                  • 0
                    @ 2023-7-19 21:38:05

                    思路:

                    因为题目说要求和为s的两个质数的积的最大值, 拆分一下就是要实现两个功能:判断是否是质数和求最大值。

                    求最大值写不写自定义函数都行,在判断完两个数是否是质数以后用max()函数求当前的最大值与两个质数的积哪个更大就行

                    主要是判断是否是质数

                    判断其实不难,可以写个自定义函数,不写也行

                    具体方法是枚举2到 这个数-1 之间所有的数字,如果有一个是这个数的因数,就说明这个数不是质数

                    最后说一下可以优化的几个点:

                    首先,枚举两个数并不需要写for循环嵌套,因为我们已经知道了两个数的总和,可以直接用 总和-循环变量 算出第二个数

                    还有,枚举范围并不需要枚举2到总和,可以缩小一丁点,枚举2到 总和-2,因为 总和 = 两个质数相加,而其中一个质数最小为2

                    #include <iostream>
                    using namespace std;
                    
                    int maxn = 0;
                    
                    void f(int x1,int x2,int &maxn)
                    {
                        int ans = x1 * x2;
                        maxn = max(ans,maxn);
                    }
                    
                    bool prime(int n)
                    {
                        for(int i = 2;i < n;i++)
                        {
                            if(n % i == 0)
                                return false;
                        }
                        return true;
                    }
                    
                    int main()
                    {
                        int s;
                        cin >> s;
                        for(int i = 2;i <= s - 2;i++)
                        {
                            if(prime(i) && prime(s - i))
                                f(i,s - i,maxn);
                        }
                        cout << maxn;
                        return 0;
                    }
                    
                    • -1
                      @ 2024-4-19 20:44:20
                      #include<iostream>
                      using namespace std;
                      bool check(int n)
                      {
                          if(n==0 || n==1)
                          {
                              return false;
                          }
                          for(int i=2;i<n;i++)
                          {
                              if (n%i==0)
                              {
                                  return false;
                              }
                          }
                          return true;
                      }
                      int main()
                      {
                          int sum,ans=0;
                          cin >> sum;
                          for(int i=sum;i>=0;i--)
                          {
                              if (check(i) && check(sum-i))
                              {
                                  if (i*(sum-i)>=ans)
                                  {
                                      ans=i*(sum-i);
                                  }
                              }
                          }
                          cout << ans;
                          return 0;
                      }
                      
                      • -2
                        @ 2023-7-20 20:08:10

                        这道题主打一个模拟法。

                        #include<iostream>
                        using namespace std;
                        bool prime(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 s,nums[10001][3],nums_i=1,max_value=-1;
                            cin>>s;
                            for(int i=2;i<=s/2;i++)
                            {
                                if(prime(i) and prime(s-i))
                                {
                                    nums[nums_i][1]=i;
                                    nums[nums_i][2]=s-i;
                                    nums_i++;
                                }
                            }
                            for(int i=1;i<nums_i;i++)
                            {
                                if(nums[i][1]*nums[i][2]>max_value)
                                {
                                    max_value=nums[i][1]*nums[i][2];
                                }
                            }
                            cout<<max_value;
                            return 0;
                        }
                        
                        • 1

                        信息

                        ID
                        304
                        时间
                        1000ms
                        内存
                        128MiB
                        难度
                        4
                        标签
                        递交数
                        1128
                        已通过
                        551
                        上传者