我写了一个C程序来打印给定范围内的素数以进行锻炼。 这是代码:
#include <stdio.h>
#include <stdbool.h>
int main (void) {
int num1,int num2;
bool flag;
int i,j,count=0;
printf("Enter range 1:");scanf("%d",&num1);
printf("Enter range 2:");scanf("%d",&num2);
if(num1<2)
num1++;
for(i=num1;i<=num2;i++){
j=2;
while(j<i){
if(i%j==0){
flag=false;
break;
}
else{
flag=true;
}
j++;
}
if(flag){
printf("%d ",i);
count++;
}
}
printf("\n");
printf("Number of prime number between %d and %d is %d\n",
num1,num2,count);
return 0;
}
代码按照我的预期工作,但当我输入1-100000或更大的范围时,程序打印输出就像无限循环一样,我必须等待一段时间才能打印程序打印所有素数。
我的问题是为什么程序需要一些时间来打印1-100000或更大范围内的所有素数?
答案 0 :(得分:3)
一些小改进:
2
以外的所有偶数。j<i
不是必需的,直到i
的平方根为止
够了。然而,对于大数字来说仍然不快,因为算法很慢。考虑一种有效的算法来查找素数,例如:Sieve of Eratosthenes。
答案 1 :(得分:2)
以下代码将为您提供更高的效率。您的代码中有许多不必要的检查。
for(i=num1;i<=num2;i++)
{
flag = 0;
for(j=2;j<=(i/2);j++)
{
if(i%j == 0)
{
flag = 1;
break;
}
}
if(!flag)
{
printf("%d ",i);
count++;
}
}
答案 2 :(得分:1)
为什么程序需要一些时间