https://codeforces.com/contest/1562/problem/B
INPUT
7
3
237
5
44444
3
221
2
35
3
773
1
4
30
626221626221626221626221626221
OUTPUT
2
27
1
4
1
1
2
35
2
77
1
4
1
6
题意
给T,T组数据,每组数据中有一个len和一个数,len为数的位数,你需要尽可能删去数内位置数字并且剩下一个最短的非质数
注意1也算个非质数。
输出要求:先输出n,为最后剩下数的长度,再输出剩下的数。
解法
既然是求最短,如果其中一位就是非质数,那直接输出长度为1,和这个数。(判断质数的时候注意特判1)
如果每一位上的数都是质数就排查任意两位数是否能组成非质数。然后输出2以及这个两个数的非质数
排查两位数就能出结果,因为不存在一个三位数每位上都是质数但是自己不是质数(详情见下面打表)
AC代码
#include<bits/stdc++.h>
using namespace std;
bool check(int a)
{
if(a == 1) return true;
for(int i = 2;i < a;i++)
if(a % i == 0)
return true; //no
return false;
}
int main()
{
int T;cin>>T;
string s;
int len;
while(T--)
{
cin>>len>>s;
bool flag = false;
for(int i = 0;i<len;i++)
{
if(check(s[i] - '0'))
{
cout<<1<<endl<<(s[i] - '0')<<endl;
flag = true;
break;
}
}
if(flag) continue;
for(int i = 0;i<len;i++)
for(int j = i + 1;j<len;j++)
{
if(check((s[i] - '0') * 10 + (s[j] - '0')))
{
cout<<2<<endl<<(s[i] - '0') * 10 + (s[j] - '0')<<endl;
goto a;
}
}
a: continue;
}
return 0;
}
如有问题敬请直接指出哈
ε=ε=ε=┏(゜ロ゜;)┛