Java——分解质因数 & 完数

课程:零基础学Java语言翁恺)第7周编程题


1 分解质因数

题目内容:

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。

现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。

输入格式:

一个整数,范围在[2,100000]内。

输出格式:

形如:

n=axbxcxd

n=n

所有的符号之间都没有空格,x是小写字母x。

输入样例:

18

输出样例:

18=2x3x3

时间限制:500ms内存限制:32000kb

代码:

import java.util.Scanner;

public class Main{

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		if(n>=2 && n<=100000) {
			int[] divisors = getDivisors(n);
			if(divisors.length==1) {
				System.out.println(n+"="+n);
			}
			else {
				System.out.print(n+"=");
				for(int i=0;i<divisors.length;i++) {
					if(divisors[i]!=0) {
						if(i>0) {
							System.out.print("x");
						}
						System.out.print(divisors[i]);
					}
				}
			}
		}
	}
	
	static int[] getDivisors(int n) {
		int[] divisors;
		boolean isPrime = true;
		for(int i=2;i<n;i++) {
			if(n%i==0) {
				isPrime = false;
				break;
			}
		}
		if(isPrime) {
			divisors = new int[] {n};
		}
		else {
			int k=0;
			divisors = new int[20];
			for(int i=2;i<=n;i++) {
				while(n%i==0) {
					divisors[k]=i;
					k++;
					n=n/i;
				}
			}
		}
		return divisors;
	}
}

2 完数

题目内容:

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如6=1+2+3(6的因子是1,2,3)。

现在,你要写一个程序,读入两个正整数n和m(1<=n<m<=1000),输出[n,m]范围内所有的完数。

提示:可以写一个函数来判断某个数是否是完数。

输入格式:

两个正整数,以空格分隔。

输出格式:

其间所有的完数,以空格分隔,最后一个数字后面没有空格。如果没有,则输出一个空行。

输入样例:

1 10

输出样例:

6

时间限制:500ms内存限制:32000kb

代码:

import java.util.Scanner;

public class exercise{

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int m = in.nextInt();
		int[] perfectnums = new int[1000];
		if(n>=1 && m<=1000 && n<m) {
			int count = 0;
			for(int i=n; i<=m; i++){
				boolean isPerfectNum = isPerfectNumber(i);
				if(isPerfectNum) {				
					perfectnums[count] = i;
					count++;
				}
			}
			if(count==0) {
				System.out.println();
			}
			else {
				for(int i=0; i<count; i++) {
					if(i>0) {
						System.out.print(" ");
					}
					System.out.print(perfectnums[i]);
				}
			}	
		}
	}
	
	static boolean isPerfectNumber(int d) {
		boolean is = false;
		int sum = 0;
		for(int i=1; i<d; i++) {
			if(d%i==0) {
				sum += i;
			}
		}
		if(sum==d) {
			is = true;
		}
		return is;
	}
}
发布了37 篇原创文章 · 获赞 47 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/u013378642/article/details/83316136