首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从数组中计算素数的最短方法是什么?由于时间限制,所有正常的素性测试都无法通过测试用例。

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

Stack Overflow用户
提问于 2019-10-25 21:35:22
回答 1查看 57关注 0票数 0

下面给出的代码通过了两个测试用例,eratosthenes的筛子通过了一个测试用例。这个问题怎么解决呢?

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

代码语言:javascript
复制
#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);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-25 23:40:49

也许你应该试试这个算法,我从这个site得到的。它看起来更省时:

代码语言:javascript
复制
    #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;
    }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58559602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档