素數:
素數是指不能被分解的數。除了1和它本身不能被其他數整除的數
求100以內的素數:
運行結果如下:
代碼如下:
public class Ch4_1 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int i;
for(i=2;i<=100;i++) {
boolean flag=true;
for(int j=2;j<=(int)Math.sqrt(i);j++) {
if(i%j==0) {
flag=false;
break;
}
}
if(flag)
System.out.println(i);
}
}
}
孿生素數:
孿生素數:若兩個素數相差爲2,則這2個素數就是孿生素數
求1-100之內的孿生素數
運行結果如下:
代碼如下:
public class Ch4_2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]=new int[100];//利用數組存儲素數
int n=0;
for(int i=2;i<=100;i++) {
boolean flag=true;
for(int j=2;j<=(int)Math.sqrt(i);j++) {
if(i%j==0) {
flag=false;
break;
}
}
if(flag) {
a[n]=i;//將素數存儲在數組中
n++;
}
}
System.out.println("100以內的孿生素數如下:");
for(int i=0;i<n;i++) {//遍歷數組
if(a[i+1]-a[i]==2) {
System.out.print(a[i]+" ");
System.out.print(a[i+1]+" ");
System.out.println("\n");
}
}
}
}
可逆素數
可逆素數:一個素數的各位數值順序顛倒後得到的數仍爲素數
編寫程序 找出1-1000之間的可逆素數
運行結果如下:
程序代碼如下:
public class Ch4_3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
int count=1;
System.out.println("1000以內的可逆素數如下:");
for(int i=2;i<=1000;i++) {
if(isSushu(i)&&isSushu(fanSushu(i)))
System.out.printf(count++ %7!=0? "%3d ":"%3d \n",i);//滿足條件,格式輸出
}
}
//是素數
public static boolean isSushu(int n) {
boolean isSushu=true;
if(n==1 ||n==2)
return true;
for(int i=2;i<Math.sqrt(n);i++) {
if(n%i==0)
return false;
}
if(isSushu==true) {
return true;
}
else
return false;
}
//反素數
public static int fanSushu(int n) {
//getBitCount(求數n的長度)
int len = getBitCount(n);
int s=0;
for(int i=1;i<=len;i++) {
//getBit(n,i)求數n的第i位上的數字
s+=Math.pow(10, len-i)* getBit(n,i);//每一位乘以權值累加
}
return s;
}
//獲取一個數的位數
private static int getBitCount(int n) {
// TODO Auto-generated method stub
int i=1;
while(n / 10 > 0) {//循環直到0爲止
i++;//計數器加一
n /= 10;//截斷最後一位
}
return i;//返回長度
}
//獲取N位數第i位
private static int getBit(int num, int i) {
// TODO Auto-generated method stub
if(i>getBitCount(num)|| i<1) {
return -1;
}
return (num % ((int) Math.pow(10, i))/(int)Math.pow(10, i-1));
}
}