用C語言實現:打印100-200之間的素數。


在編程之前,首先我們要了解素數的定義:在大於1的自然數中,除了1和它本身以外不再有其他因數。

因此,我們會最先想到一個方法:設100~200間的這個數是i,用i去分別除以2~(i-1)間的每一個數。

即:

#include<stdio.h>
int main()
{
 int i, j;
 for (i = 100; i <= 200; i++)
 {
  for (j = 2; j <= i-1; j++)
  {
   if (i%j == 0)
    break;//如果能整除就跳出該次循環,避免多余運算
  }
  if (j==i)//該條件代表沒有整除。
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

但是運用這種方法進行編程,會使代碼過於繁瑣,系統執行速度較慢,所以我們繼續探究是否能將該代碼進行優化。

這里有兩種優化的方法:

第一種:因為i不可能整除比i/2更大的數,所以我們可以設置第3個變量t,用來存儲i/2的值。

#include<stdio.h>
int main()
{
 int i, j,t;
 for (i = 100; i <= 200; i++)
 {
  t = i / 2;
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

第二種:相比於i/2,用t來儲存i的平方根會更加優化這種算法。但這種算法需要引入新的頭函數math.h,和新的函數sqrt()開方函數。

#include<stdio.h>
#include<math.h>
int main()
{
 int i, j, t;
 for (i = 100; i <= 200; i++)
 {
  t = sqrt(i);//開方函數
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

到這一步我們只是優化了內循環過程,我們還可以對外循環進行優化。

我們都知道100~200之間的偶數不可能是素數,因此我們可以人為的令i初始化為101,並每次循環時令其+2。

#include<stdio.h>
#include<math.h>
int main()
{
 int i, j, t;
 for (i = 101; i <= 200; i+=2)
 {
  t = sqrt(i);
  for (j = 2; j <= t; j++)
  {
   if (i%j == 0)
    break;
  }
  if (j>t)
   printf("%d ", i);
 }
 printf("\n");
 system("pause");
 return 0;
}

通過這樣的優化一下子就會使我們的程序計算量減少一半,對提升程序的效率十分有效。

最后附上程序運行后的結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM