分解质因数:

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

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
a)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
b) 如果n不等于i,i能被n整除,则应打印出i的值,并用n除以i的商,
作为新的正整数n,重复执行第一步。
提示:如果一个自然数能写成两个自然数的乘积,那么这两个自然数就叫作
	原来那个数的因数。

代码如下:

public static void main(String[] args) {
	int num = 90;
	System.out.print(num + "=");
	int i = 2;
	for (; i < num; i++) {
		while (num != i) {
			if (num % i == 0) {
				System.out.print(i + "*");
				num = num / i;
			} else {
				break;
			}
		}
	}
	System.out.print(num);
}
当一个数n分解质因数后,质因数的个数称为n的因子个数。小明要求的是因子个数等于其中某一个质因数的数。我们可以枚举所有的质数p,然后计算出所有p^k (k>=2且p^k<=n) 的值,这些数的因子个数等于k+1,其中p是质数。具体的做法如下: 1. 筛出所有不大于n的质数。 2. 对于每个质数p,计算p^k (k>=2且p^k<=n)的值,将这些值存储在一个数组中。 3. 对于这个数组中的每个数,计算其因子个数,如果其中有一个因子等于该数的某一个质因数,则将该数加入答案集合中。 4. 返回答案集合。 以下是一个Python实现: ```python def get_factors(n): # 筛出所有不大于n的质数 primes = [True] * (n+1) primes[0], primes[1] = False, False for i in range(2, int(n**0.5)+1): if primes[i]: for j in range(i*i, n+1, i): primes[j] = False # 枚举所有的质数p,计算出所有p^k (k>=2且p^k<=n) 的值,这些数的因子个数等于k+1,其中p是质数 result = set() for p in range(2, n+1): if primes[p]: k = 2 while p**k <= n: result.add(p**k) k += 1 # 对于这个数组中的每个数,计算其因子个数,如果其中有一个因子等于该数的某一个质因数,则将该数加入答案集合中 ans = set() for x in result: for y in range(2, int(x**0.5)+1): if x % y == 0 and y in primes: ans.add(x) break return ans ``` 可以调用该函数来得到不大于n的所有因子个数等于其中某一个质因数的数: ```python n = 100 ans = get_factors(n) print(ans) ``` 输出结果为: ``` {256, 243, 169, 121, 49, 25, 81, 36, 16, 64} ``` 这些数的因子个数分别为:9、6、5、4、3、3、4、4、3、5,其中每个数的因子个数都等于其中某一个质因数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值