問題:列印100---200之間的素數,并得出個數。
1.首先我們要了解 “ 素數 (質數)”,就是大于1的自然數,除了1和自身之外沒有别的因數。
循環解決問題:
試除法
#include<stdio.h>
int main()
{
int i=0;
int count=0;
for(i=100;i<=200;i++) //第一個循環
{
int j=0;// j的取值範圍為 : 2<j<i-1
for(j=2;j<i;j++) //第二個循環語句
{
if(i%j==0) //說明在規定的區間範圍内有可以被i整除的數
break; //不滿足,是以跳出第二個循環語句
}
if(i==j)
{
printf("%d\n",j);
count++;
}
}
printf("\ncount=%d\n",count);
return 0;
}
第二種:優化,減少了整除的次數
#include<stdio.h>
#include<math.h> //這裡是sqart的頭檔案
int main()
{int i=0;
int count=0;
for(i=100;i<=200;i++) //第一個循環
{
int j=0;// j的取值範圍為 : 2<j<i-1
for(j=2;j<sqart(i);j++) //第二個循環語句
{
if(i%j==0) //說明在規定的區間範圍内有可以被i整除的數
break; //不滿足,是以跳出第二個循環語句
}
if(j>sqart(i))
{
printf("%d\n", i);
count++;
}
}
}
printf("\ncount=%d\n",count);
return 0;
}
或者還可以進一步簡化,就是在for語句内改為(i=101;i<=200;i+=2)
第三種:函數的運用
#include<stdio.h>
int is_prime(int n)
{
int j=0;
for(j=2;j<n;j++)
{
if(i%j==0)
return 0;
}
return 1;
}
int main()
{
int i=0;
for(i=100;i<=200;i++)
{
if( is_prime(i)==1)
printf("%d \n",i);
}
return 0;
}