求怎么改(结果超时了)

img


#include<stdio.h>
long long a(long long n)
{long long i;
if(n<=1)return 0;
for(i=2;i<n;i++)
if(n%i==0)return 0;
return 1;
}
int main()
{
    long long m,i,j=0,s=0;
    scanf("%lld",&m);m++;
    while(j!=5)
    {if(a(m))
    {j++;s+=m;
    }m++;
    }printf("s=%lld",s);
    return 0;
 } 

结果超时了,怎么改啊?

该回答引用ChatGPT
修改如下


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

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

int main() {
    long long m, i, j = 0, s = 0;
    scanf("%lld", &m);
    m = m % 2 == 0 ? m + 1 : m;
    while (j != 5) {
        if (is_prime(m)) {
            j++;
            s += m;
        }
        m += 2;
    }
    printf("s=%lld", s);
    return 0;
}


修改如下,供参考:

#include<stdio.h>
long long a(long long n)
{
    long long i;
    if (n < 4)  return n > 1; //if (n <= 1)  return 0; 修改
    for (i = 2; i * i <= n; i++) //for (i = 2; i < n; i++)修改
        if (n % i == 0) return 0;
    return 1;
}
int main()
{
    long long m, i, j = 0, s = 0;
    scanf("%lld", &m); m++;
    while (j != 5)
    {
        if (a(m))
        {
            j++; s += m;
        }m++;
    }printf("s=%lld", s);
    return 0;
}

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^