将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

本文介绍了一个简单的Java程序,用于将输入的正整数分解为其质因数,并以连乘形式展示结果。例如,输入90时,程序会输出90=2*3*3*5。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入一个正整数:");
		int n = sc.nextInt();
		System.out.print(n + "=");
		solution(n);
	}

	public static void solution(int n) {
		for (int i = 2; i <= n; i++) {
			if (n == i) {
				System.out.println(i);
				return;
			}
			if (n > i && (n % i == 0)) {
				System.out.print(i + "*");
				solution(n / i);
				break;
			}

		}
	}
}



### 实现正整数分解质因数 为了实现将正整数分解质因数的功能,下面提供了一种简单而有效的方法。此方法通过循环遍历可能的因子来逐步减少待分解的数值直到其变为1。 #### 方法一:迭代方式分解质因数 这种方法采用了一个简单的策略——从小到大尝试每一个潜在的质因数,并尽可能多地去除这些因素,从而简化原始数字[^1]。 ```python def decompose_prime_factors(n): original_n = n factors = [] divisor = 2 while n > 1: while n % divisor == 0: factors.append(divisor) n //= divisor divisor += 1 result_str = f"{original_n}=" if not factors: result_str += str(original_n) else: result_str += "*".join(str(factor) for factor in factors) print(result_str) decompose_prime_factors(90) ``` 上述代码定义了一个名为`decompose_prime_factors` 的函数,该函数接收一个参数 `n` 表示要被分解正整数。它会初始化一个列表用于存储找到的所有质因数,并设置初始除数为最小质数2。接着进入一个外部while循环,在每次迭代中再次检查当前值能否继续被当前除数整除;如果是的话就将其加入到结果集中并将原数值相应缩小。当不再有剩余可分部分时结束内层循环并增加除数直至完成整个过程。最后构建输字符串表示形式并打印来[^3]。 对于给定的例子输入90,这段代码将会输如下内容: ``` 90=2*3*3*5 ``` #### 方法二:优化后的迭代解法 考虑到效率问题,可以在寻找下一个候选因子之前先处理掉所有的偶数情况,之后只需要考虑奇数即可。这样可以显著提高性能特别是针对较大的输入值[^2]。 ```python from math import isqrt def optimized_decompose_prime_factors(n): original_n = n factors = [] # Handle even numbers first. while n % 2 == 0: factors.append(2) n //= 2 # Only check odd divisors now. for d in range(3, isqrt(n) + 1, 2): while n % d == 0: factors.append(d) n //= d if n != 1 and n != original_n: # If there&#39;s a remaining prime number greater than sqrt(n). factors.append(n) result_str = f"{original_n}=" + "*".join(map(str, factors)) print(result_str) optimized_decompose_prime_factors(90) ``` 在这个版本里引入了两个改进措施: - 预先移除了所有2这个特殊情况下产生的影响; - 使用更高效的平方根计算代替直接求取上限范围内的所有自然数作为测试对象。 同样地,运行上面给的样例也会得到相同的预期输:“90=2*3*3*5”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值