[英]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.