【算法】质数的后代

描述

  在上一季里,曾提到过质数的孤独,其实从另一个角度看,无情隔膜它们的合数全是质数的后代,因为合数可以由质数相乘结合而得。

  如果一个合数由两个质数相乘而得,那么我们就叫它是质数们的直接后代。现在,给你一系列自然数,判断它们是否是质数的直接后代。

输入描述:

  第一行一个正整数T,表示需要判断的自然数数量

  接下来T行,每行一个要判断的自然数

输入样例:

4

3

4

6

12

输出描述:

  共T行,依次对于输入中给出的自然数,判断是否为质数的直接后代,是则输出Yes,否则输出No

输出样例:

No

Yes

Yes

No


import java.util.Scanner;

public class Main {
	boolean isPrimenumber(int i) { // 判断是否是质数的方法
		for (int x = 2; x < i; x++) { // 
			if (i % x == 0) {
				return false;
			}
		}
		return true;

	}
	public static void main(String[] args) {
		Main m = new Main();
		Scanner input = new Scanner(System.in);
		int T = input.nextInt();
		boolean arr[]=new boolean [T];//定义一个boolean数组 方便存储true or  false
		for (int i = 0; i < T; i++) {//一个数一个数处理 一开始我是将一组数存到一个数组中在进行一个一个查找
			int x = input.nextInt();
			if(m.isPrimenumber(x)||x==1||x==0)//如果是质数或者是1 0 均为false
				arr[i]=false;
			else {
				int i1=2;
				for(;i1<x;i1++) {
					int temp=x/i1;
					if(i1*temp==x&&m.isPrimenumber(temp) && m.isPrimenumber(i1)) {
						arr[i]=true;//这里的话 要用i1*temp==x 如果用x%i1 or x%temp 都会出错
						break;
					}
					else  //这就是为什么要用数组先存放true or false 一开始我是用 sysout直接输出 结果错了 
						arr[i]=false;
				}
			}
		}
		for(int i=0;i<T;i++) {
			if(arr[i]==true)
			System.out.println("Yes");
			else
				System.out.println("No");
		}
		
	}
}

猜你喜欢

转载自blog.csdn.net/kevin_nan/article/details/86553702