C 从数组中计算素数的最短方法是什么。由于时间限制,所有正常的素性测试都未通过测试用例

C 从数组中计算素数的最短方法是什么。由于时间限制,所有正常的素性测试都未通过测试用例,c,C,下面给出的代码通过了两个测试用例,埃拉托斯烯筛通过了1个测试用例。如何解决这个问题 我已经试过miller-rabin和Siever-eratosthenes素性测试。 由于时间限制,没有人通过所有测试用例。有没有比这些更快的方法? 下面的代码通过了5个测试用例中的两个。就时间复杂度而言,它能缩短吗 #include<stdio.h> #include<math.h> int isPrime(int n) { int i; int x=(int)(sqr

下面给出的代码通过了两个测试用例,埃拉托斯烯筛通过了1个测试用例。如何解决这个问题

我已经试过miller-rabin和Siever-eratosthenes素性测试。 由于时间限制,没有人通过所有测试用例。有没有比这些更快的方法? 下面的代码通过了5个测试用例中的两个。就时间复杂度而言,它能缩短吗

#include<stdio.h>
#include<math.h>
int isPrime(int n) 
{
    int i;
    int x=(int)(sqrt(n));
    if(n==2)
    return 1;
    else if(n%2==0)
    return 0;
    else
    {
        for(i=3;i<=x;i+=2)
        {
            if(n%i==0)
            {
                return 0;
            }
        }
    }
    return 1;

}
int counting(int *a,int n)
{
    int i,c=0;
    for(i=0;i<n;i++)
    {
        if(isPrime(a[i]))
        c++;
    }
    return c;
}
void main()
{
    int cases,n,a[100000],i,j,count;
    scanf("%d",&cases);
    for(i=0;i<cases;i++)
    {
        scanf("%d",&n);
        for(j=0;j<n;j++)
        scanf("%d",&a[j]);
        count=counting(a,n);

        printf("%d\n",count);
    }
}
#包括
#包括
intisprime(intn)
{
int i;
int x=(int)(sqrt(n));
如果(n==2)
返回1;
否则如果(n%2==0)
返回0;
其他的
{

对于(i=3;i也许你应该试试这个算法,我从中得出结论。它似乎更省时:

    #include <stdio.h>
    int main()
    {
        int n, i, flag = 0;
        printf("Enter a positive integer: ");
        scanf("%d", &n);
        for(i = 2; i <= n/2; ++i)
        {
            // condition for nonprime number
            if(n%i == 0)
            {
                flag = 1;
                break;
            }
        }
        if (n == 1) 
        {
          printf("1 is neither a prime nor a composite number.");
        }
        else 
        {
            if (flag == 0)
              printf("%d is a prime number.", n);
            else
              printf("%d is not a prime number.", n);
        }

        return 0;
    }
#包括
int main()
{
int n,i,flag=0;
printf(“输入一个正整数:”);
scanf(“%d”和“&n”);

对于(i=2;i对于
n
的任何有效值,该算法都比问题中的算法慢得多-可以从大约1000开始测量,甚至可能在这之前。你可以使用埃拉托斯烯筛来构建一组缓存的素数。将其构建到所讨论的数字,然后在必要时进行扩展。如果你没有e对于目前为止使用的所有数字,内存不足,只存储素数。然后通过
bsearch()
搜索列表。