素数:
素数是指不能被分解的数。除了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));
}
}