首页 > 解决方案 > 在hackerearth中获取TLE

问题描述

当我在hackerearth 提交此代码时,我得到了TLE。

任何建议我如何优化此代码。

#include <stdio.h>
#include <stdlib.h>

int checkPrime(int);

int main() {
int a, b,
    reminder,sum=0,n;

    scanf("%d %d",&a,&b);

    while(a <= b) {
        n = a;
        sum = 0;
        reminder = 0;

        while (n > 0) {
        reminder = n % 10;
        sum += reminder;
        n = n / 10;
        }

        if(sum > 1 && checkPrime(sum) == 1 && checkPrime(a) == 1) {
            printf("%d ",a);  
        }

        ++a;
    }

return 0;
}

int checkPrime(int p) {

int i,flag=1;

for(i=2; i <= p / 2; i++){
    if(p%i == 0)  {
        flag = 0;
        break;  
    }
}

return flag;

}

这是我编码的问题

以及如何分析此代码并获得时间复杂度。

标签: c++calgorithmprimes

解决方案


您的checkprime函数需要大量运行时间。它为N/2操作而运行。

您正在为所有数字运行此操作,因此您正在为N*N/2操作运行,这太多了。

我建议您使用更好的方法来生成素数。看看埃拉托色尼筛


推荐阅读