12 条题解

  • 3
    @ 2022-11-26 11:34:41

    按照思路枚举模拟即可。#5竟然给我过了。

    #include <bits/stdc++.h>
    #define min(a, b) (a<b ? a : b)
    #define max(a, b) (a>b ? a : b)
    using namespace std;
    
    int n;
    
    bool isPrime(int x){ // 简单的判断质数,新手必会
    	for (int i=2; i*i<=x; i++)
    		if (x%i==0) return false;
    	return true;
    }
    
    void print(int a){
    	for (int i=3; i<=a-2; i+=2){ // 特判2的情况
    		if (isPrime(i) && i==a-2){
                cout<<a<<" = 2 + "<<i<<endl;
    			return;
    		}
    	}
    	for (int i=3; i<=a-3; i+=2){ // 一般情况
    		if (isPrime(i) && isPrime(a-i)){
                cout<<a<<" = "<<min(a-i, i)<<" + "<<max(a-i, i)<<endl;
    			return;
    		}
    	}
    }
    
    int main(){
    	while (cin>>n && n/*这一步是为了结束输入,完整写法为n!=0*/) print(n);
    	return 0;
    }
    

    信息

    ID
    197
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    567
    已通过
    213
    上传者