2 条题解

  • 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
      难度
      3
      标签
      递交数
      246
      已通过
      138
      上传者