1 条题解
-
0
#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
- 上传者