MOOC翁恺老师Java课程编程题——第七周

1分解质因数(5分)
题目内容:

每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,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{
	static boolean IsPrime(int num)
	{
		int i = 2;
		for(i = 2; i <= Math.sqrt(num); i++)
		{
			if(num % i == 0)
				return false;
		}
		return true;
	}
	
	public  static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int [] arr= new int[11];	//存放各个素因子
		int num;					//输入的数字
		int i=0; 					//用于做数组的下标			
		int j=2;					//用于判断素数
		
		
		//输入数据
		num = in.nextInt();
		System.out.print(num+"=");
		
		
		
		//处理数据
		//当最后一个数是素数的时候就结束了
		while(IsPrime(num) == false) {
			for(j = 2; j <= Math.sqrt(num); j++)
			{
				if(num % j == 0)
				{
					arr[i++] = j;
					break;
				}
			}
			num /= j;
		}
		arr[i++] = num;
		
		
		
		//输出数据
		for(int k = 0; k < i; k++)
		{
			if(k == 0) 
			{
			System.out.print(arr[k]);
			}
			else
			{
				System.out.print("x"+arr[k]);
			}
		}
		in.close();
	}
}

2完数(5分)
题目内容:

一个正整数的因子是所有可以整除它的正整数。而一个数如果恰好等于除它本身外的因子之和,这个数就称为完数。例如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 Main {
	static boolean Condition(int num) {
		int ans = 0;
		//判断完数
		for(int i = 1; i < num; i++)
		{
			if( num % i == 0)
			{
				ans+=i;
			}
		}
		if(ans == num)
			return true;
		else
			return false;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner in = new Scanner(System.in);
		int[] arr = new int[20]; // 存储完数
		int i = 0; // 用于遍历
		int index = 0; // 用于数组下标的遍历
		int m, n; // 表示区间范围
		m = in.nextInt();
		n = in.nextInt();

		// 从m到n进行遍历求完数
		for (i = m; i <= n; i++) {
			if (Condition(i) == true) {
				arr[index++] = i;
			}
		}

		// 数组最大下标为0,输出空行
		if (index == 0) {
			System.out.println();
		}

		// 数组最大下标非0,按格式输出
		else {
			for (int k = 0; k < index; k++) {
				if (k != index - 1) {
					System.out.print(arr[k] + " ");
				} else {
					System.out.print(arr[k]);
				}
			}
		}
		in.close();
	}
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值