3 条题解

  • 0
    @ 2025-11-20 18:32:26
    #include <iostream>
    #include <cmath>
    
    bool is_prime(int a)
    {
        if(a < 2) return false;
        if(a == 2) return true;
        if(a % 2 == 0) return false;
        
        for(int i = 3; i <= sqrt(a); i += 2)//对称法
        {
            if(a % i == 0) return false;
        }
        return true;
    }
    
    int main()
    {
        using namespace std;
        int n;
        cin >> n;
    
        for(int i = 2; i <= n / 2; i++) //对称法
        {
            if(is_prime(i) && is_prime(n - i))
            {
                cout << i << " " << n - i << endl;
                break;
            }
        }
        return 0;
    }
    
    • 0
      @ 2025-10-2 15:34:06

      题目不难,但是这里有个小方法不知道你知不知道。

      我们可以使用数组存储目前所有小于n的素数,之后用该数组中小于n的根号的数去作为因数去判断之后的数是否为质数。

      最后对应这道题,获得数组之后遍历即可(因为此方法获得的质数数组已经是升序排列了,无需再排

      #include<stdio.h>
      #include<string.h>
      #include<stdlib.h> 
      #include<math.h>
      int sss=0;
      int ss[1000];
      
      int isp(int n){
      	int i;
      	if(n<2) return 0;
      	for(i=0;i<sss&&ss[i]*ss[i]<=n;i++){
      		if(n%ss[i]==0){
      			return 0;
      		}
      	}
      	return 1;
      }
      
      void finds(int max){
      	int num;
      	for(num=2;num<=max&&sss<1000;num++){
      		if(isp(num)){
      			ss[sss]=num;
      			sss++;
      		}
      	}
      }
      
      int main(){
      	int n;scanf("%d",&n);
      	finds(n);
      	int i,j,found=0;
      	for(i=0;i<sss;i++){
      		if(ss[i]>n) break;
      		for(j=sss-1;j>=0;j--){
      			if(ss[j]>=n) continue;
      			if(ss[i]+ss[j]==n){
      				printf("%d %d",ss[i],ss[j]);
      				found=1;
      				break;
      			}
      			if(ss[i]+ss[j]<n) break;
      			}
      			if(found) break;
      		}
      	
      	return 0;
      }
      
      • 0
        @ 2024-11-10 11:50:15

        #include<bits/stdc++.h> using namespace std;

        bool judge(int x) { int flag=1;

        if(x==1||x<=0||x==4)
        	flag=0;
        else if(x==2||x==3)
        	flag=1;
        else
        {
        	for(int i=2; i*i<=x; i++)
        	{
        		if(x%i==0)
        		{
        			flag=0;
        		}
        	}
        }
        
        return flag;
        

        }

        int main() { int n;

        cin>>n;
        
        for(int i=3; 2*i<=n; i++)
        {
        	int x1=i,x2;
        	
        	if(judge(x1))
        		x2=n-x1;
        	
        	if(judge(x2))
        	{
        		cout<<x1<<" "<<x2; break;
        	}
        	else
        		continue;
        }	
        
        return 0;
        

        }

        • 1

        信息

        ID
        236
        时间
        1000ms
        内存
        256MiB
        难度
        2
        标签
        递交数
        305
        已通过
        176
        上传者