题意简单,不过有些坑点
测试点1:判断是0,1是不是素数
测试点2、5:循环结束条件要i<=s.size(),不然会漏判最后一个情况
for(ll i=k;i<=s.size();i++)
注意:前导零,如果没设置格式,比如数字0023会直接输出23
#include <bits/stdc++.h> using namespace std; typedef long long ll; bool isPrime(ll x){ if(x <= 1)return false; for(ll i = 2;i*i<=x;i++){ if(x%i==0)return false; } return true; } int main(){ ll l,k,ans=0,w=1; bool flag =false; cin>>l>>k; string s; cin>>s; for(ll i=0;i<k;i++){ ans = ans*10 + s[i]-'0'; if(i!=0)w*=10; } for(ll i=k;i<=s.size();i++){ if(isPrime(ans)){ flag = true; cout << setfill('0') << setw(k)<<ans<<"\n"; break; } else { ans = ans%w; ans = ans*10 +s[i]-'0'; } } if(!flag)cout<<"404"<<"\n"; return 0; }