为什么一个正确,一个部分正确?

img

img


#include<iostream>
#include<cstring>
using namespace std;
bool isprime(int num){
    if(num==0||num==1)
    return false;
    for(int i=2;i<num;i++){
        if(num%i==0){
            return false;
        }
    }
    return true;
}
int main(){
    int L,K;
    string x;
    cin>>L>>K>>x;
    for(int i=0;i<=L-K;i++){
        string t=x.substr(i,K);
        int number=stoi(t);
        if(isprime(number))
        cout<<t<<endl;
        return 0;
    }
    cout<<"404\n";
    return 0;
}
#include <iostream>
#include <string>
using namespace std;
bool isPrime(int n) {
    if (n == 0 || n == 1) return false;
    for (int i = 2; i * i <= n; i++)
        if (n % i == 0) return false;
    return true;
}
int main() {
    int l, k;
    string s;
    cin >> l >> k >> s;
    for (int i = 0; i <= l - k; i++) {
        string t = s.substr(i, k);
        int num = stoi(t);
        if (isPrime(num)) {
            cout << t;
            return 0;
        }
    }
    cout << "404\n";
    return 0;
}

正确是说测试数据全部通过。部分正确就是测试数据有的通过了,有的没通过。上述两个程序,不考虑性能只考虑功能,都是正确的。但是Online Judge题目都是有执行时间、占用内存限制的。总不能写个耗时一万年的程序一直跑吧?一旦超出时间就会判定为错误。有的Judge会给出overtime的提示,有的没那么多提示只显示错误。第1个isprime明显效率低,数据量大必然超时。