還可以用 scanf 做外部輸入範圍
以 2 的指數作範圍
語法:
//質數計算
#include <stdio.h> //載入函式庫 stdio
#include <stdlib.h> //載入函式庫 stdlib
#include <math.h> //載入函式庫 math
#define clrscr() system("CLS") //畫面清除巨集
#define pause() puts("\n") & system("PAUSE") //畫面暫停巨集
main()
{
unsigned long int i,j,mod_counter; //for_loop 變數 i,j;整除統計 mod_counter
unsigned long int min=0,max=0,counter = 0;
int inupt_exp;
clrscr(); //畫面清除
printf ("\n請輸入欲求取質數的位元數:");
scanf("%d",&inupt_exp);
clrscr(); //畫面清除
printf ("\n %d 位元質數:\n",inupt_exp);
printf ("\n最小質數");
for ( i=1; i<=pow(2,inupt_exp)-1; i++ ) { //取餘數除法的Loop1,i 為被除數 3
mod_counter = 0; //整除統計歸零
for ( j=2; j<=i; j++ ) //取餘數除法的Loop2,j 為除數
if ( i%j == 0 ) mod_counter ++ ; //當被整除時,整除計數 +1
if ( mod_counter == 1 ) { //當被整除次數只有 1 次,並輸出最大質數
counter ++; //統計質數的個數
min = i; //紀錄最小的質數
printf ("為 %d\n",i);
}
}
if ( min == 0) printf (" 沒有\n");
printf ("\n最大質數");
if ( max > 0) printf ("為 %d\n",max); else printf (" 沒有\n");
printf ("\n共有 %d 個值數\n",counter);
pause(); //畫面暫停
}
用開始與結束的值做範圍
語法:
//質數計算
#include <stdio.h> //載入函式庫 stdio
#include <stdlib.h> //載入函式庫 stdlib
#include <math.h> //載入函式庫 math
#define clrscr() system("CLS") //畫面清除巨集
#define pause() puts("\n") & system("PAUSE") //畫面暫停巨集
#define swap(x,y) (x^=y^=x^=y) //數值交換巨集
main()
{
unsigned long int i,j,mod_counter; //for_loop 變數 i,j;整除統計 mod_counter
unsigned long int min=0,max=0,counter=0;
unsigned long int inupt_A,inupt_B;
clrscr(); //畫面清除
printf ("\n請輸入欲求取質數的數值 A :");
scanf("%d",&inupt_A);
printf ("\n請輸入欲求取質數的數值 B :");
scanf("%d",&inupt_B);
clrscr(); //畫面清除
printf ("\n%d ~ %d 的質數:\n",inupt_A,inupt_B);
printf ("\n最小質數");
if (inupt_A > inupt_B) //A值 > B值,就互換數值
swap(inupt_A,inupt_B);
for ( i=inupt_A; i<=inupt_B; i++ ) { //座取餘數除法的Loop1,i 為被除數
mod_counter = 0; //整除統計歸零
for ( j=2; j<=i; j++ ) //座取餘數除法的Loop2,j 為除數
if ( i%j == 0 ) mod_counter ++ ; //當被整除時,整除計數 +1
if ( mod_counter == 1 ) { //當被整除次數只有 1 次,並輸出最大質數
counter ++; //統計質數的個數
if ( counter == 1 ) {
min = i; //紀錄最小的質數
printf ("為 %d\n",i);
}
max = i; //紀錄最大的質數
}
}
if ( min == 0) printf (" 沒有\n");
printf ("\n最大質數");
if ( min > 0) printf ("為 %d\n",max); else printf (" 沒有\n");
printf ("\n\n共有 %d 個值數\n",counter);
pause(); //畫面暫停
}