四 趣味素数

素数:

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

}

猜你喜欢

转载自blog.csdn.net/qq_41520877/article/details/104381319