C 从数组中计算素数的最短方法是什么。由于时间限制,所有正常的素性测试都未通过测试用例
下面给出的代码通过了两个测试用例,埃拉托斯烯筛通过了1个测试用例。如何解决这个问题 我已经试过miller-rabin和Siever-eratosthenes素性测试。 由于时间限制,没有人通过所有测试用例。有没有比这些更快的方法? 下面的代码通过了5个测试用例中的两个。就时间复杂度而言,它能缩短吗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
#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()
搜索列表。