C語言 素數判斷,輸出100以內的素數,用逗號分隔,第一個逗號不輸出
阿新 • • 發佈:2019-01-23
/* 質數(prime number)又稱素數,有無限個。 質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,這樣的數稱為質數。 */ #include <stdio.h> int isPrime(int);//判斷數n是不是素數 void printResult(int);//列印結果 int main() { int i; printf("0到100之內的素數:\n"); for(i=0;i<100;i++) { printResult(i); } return 0; } /* 質數(prime number)又稱素數,有無限個。 質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數,這樣的數稱為質數。 */ int isPrime(int n)//判斷數n是不是素數 { if(n<=1) return -1;//返回-1表示這個數應該大於1; int i; int IsPrime=1;//預設不是質數 //for(i=2;i<=n/2;i++) //一個數 n 如果是合數,那麼它的所有的因子不超過sqrt(n) for(i=2;i<=sqrt(n);i++) { if(n%i==0)//如果有其他因數 { IsPrime=0;//那就不是質數,用0表示 break;//退出迴圈 } } return IsPrime;//返回標誌 } void printResult(int n) { static int count=0;//加上static靜態區域性變數,這樣只有第一次呼叫函式的時候count的值為1 int flag=isPrime(n);//判斷 if(flag==-1) printf("素數是大於1的整數!n=%d輸入錯誤!n要是大於1的整數\n",n); else if (flag) { if(count==1)//第一次呼叫函式時,count為0,第一個逗號不輸出,以後count都為1 輸出逗號分隔素數 printf(","); printf("%-2d",n); count=1; } }
結果:
0到100之內的素數:
素數是大於1的整數!n=0輸入錯誤!n要是大於1的整數
素數是大於1的整數!n=1輸入錯誤!n要是大於1的整數
2 ,3 ,5 ,7 ,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
java實現:
結果:package Ctojava; public class PrintPrime100 { public static void main(String[] args) { boolean printComma=false; for(int i=0;i<=100;i++) { if(isPrime(i)) { if(printComma) System.out.print(","); else printComma=true; System.out.print(i); } } } public static boolean isPrime(int n) { if(n<=1) return false; for(int i=2;i<=Math.sqrt(n);i++) { if(n%i==0)//如果找到一個因數 return false;//那就不是質數 } //如果沒有找到因數 return true;//那就是 } }
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97