有没有大神知道为什么会超限[face]monkey2:019.png[/face][face]mon

有没有大神知道为什么会超限[face]monkey2:019.png[/face][face]monkey2:019.png[/face][face]monkey2:019.png[/face][face]monkey2:026.png[/face]

修改了一下你的代码:


#include <stdio.h>
#include <math.h>

int isPrime(int n)
{
    for (int i = 2; i < sqrt(n); ++i)
        if (n % i == 0)
            return 0;
    return 1;
}


int main()
{
    int n;

    printf("Please enter a number): ");
    scanf("%d", &n);
    
    for (int i = 2; i <= n / 2; ++i)
    {
        int j = n - i;
        if (isPrime(i) && isPrime(j))
        {
            printf("prime %d + %d = %d\n", i, j, n);
        }
    }
    
    return 0;
}

// Output
Please enter a number): 100                                                                                                                                                        
prime 3 + 97 = 100                                                                                                                                                                 
prime 11 + 89 = 100                                                                                                                                                                
prime 17 + 83 = 100                                                                                                                                                                
prime 29 + 71 = 100                                                                                                                                                                
prime 41 + 59 = 100                                                                                                                                                                
prime 47 + 53 = 100   

附注:求赞助积分和C币。加入CSDN将近20年了。最近几年忙小孩没登录。刚才搜索到一本电子书想下载,需要20积分/C币。已经收到8元了,还差12元。赞助多少都可以。多谢。

你的程序时间复杂读为O(n^2),太高。完全可以O(n).

外层循环到 n/2 结束,内层循环去掉,j = n - i; 就可以了。

 

判断是否是素数,循环到sqrt(n)可以了。