[英]C program can not display 3000 numbers
该程序应显示1-3000范围内的素数,但仅显示743-3000的素数。 如何打印该范围内的所有素数?
这是程序:
#include <stdio.h>
#include <math.h>
#include <stdbool.h>
main()
{
unsigned long long num, divisible_num;
printf("The prime numbers in the range of 1 - 3000 are: \n");
for(num=1;num<=3000;num++)
{
for(divisible_num=2;divisible_num<=sqrt(num);divisible_num++)
{
if(num%divisible_num==0)
break;
}
if(num%divisible_num!=0)
{
printf("%lu\n", num);
}
}
getchar();
}
最重要的事情是从for循环中获取sqrt
调用。 你可以计算一次。 更好的是,将它们全部删除
for(divisible_num=2;divisible_num * divisible_num<=num;divisible_num++)
如果数字不能被小于或等于sqrt(num)的任何素数整除,则该数字为素数。
int prime = 1;
for(divisible_num=2;divisible_num * divisible_num<=num;divisible_num++) {
if (num % divisible_num == 0) {
prime = 0;
break;
}
}
if (prime) {
//print the num
}
你的外环也必须从2开始。
当我运行你的代码时,它的范围是1-3000。 我不确定你的问题是什么。 get char()似乎有点不合适。
一旦检查两次,您不必再除以更多偶数。 此代码的工作范围为3 - 3000
for(num=3;num<=3000;num++)
{
int prime = (num%2 != 0);
long root = sqrt(num);
for(divisible_num=3;prime && divisible_num <= root;divisible_num+=2)
{
if(num%divisible_num==0){
prime = 0;
}
}
if(prime)
{
printf("%lu\n", num);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.