1 条题解

  • 0
    @ 2026-1-30 16:01:28
    #include<bits/stdc++.h>
    using namespace std;
    string s;  // 存储输入的数字字符串
    
    // [1] 判断一个数是否为素数
    bool pd(int x){
        if(x==1 || x==0) return false;  // 0和1不是素数
        for(int i=2;i*i<=x;i++){        // 遍历到sqrt(x),判断是否有因子
            if(x%i==0) return false;    // 若有因子则不是素数
        }
        return true;  // 无因子则是素数
    } 
    
    // [2] 根据拆分位置x,将字符串拆分为前后两段并转成整数求和
    int zh(int x){
        int a=0,b=0;
        // 前半部分:从第0位到第x位,转成整数a
        for(int i=0;i<=x;i++){
            a=a*10+(s[i]-'0');
        }
        // 后半部分:从第x+1位到末尾,转成整数b
        for(int i=x+1;i<s.size();i++){
            b=b*10+(s[i]-'0');
        }
        return a+b;  // 返回两段数字的和
    }
    
    int main() {
        cin>>s;  // 输入数字字符串
        int n=s.size(),min_num=INT_MAX;  // n:字符串长度,min_num:初始化最小素数和为无穷大
    
        // [3] 遍历所有可能的拆分位置(从第1位前到倒数第2位前)
        for(int i=0;i<n-1;i++){
            // 调用zh函数得到当前拆分方式的两数之和
            int num=zh(i);
            // 判断该和是否为素数
            if(pd(num)){
                // 如果是素数,更新最小素数和
                min_num=min(min_num,num);
            }
        }
    
        // [4] 输出结果:若找到最小素数和则输出,否则输出-1
        if(min_num==INT_MAX){
            cout<<-1;
        }else{
            cout<<min_num;
        }
        return 0;
    }
    
    • 1

    信息

    ID
    1210
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    2
    已通过
    1
    上传者