[算法]分解质因数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[算法]分解质因数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1503字,纯文字阅读大概需要3分钟。
内容图文
分解质因数
问题描述
将一个正整数分解质因数.
例如,输入90,打印出 90=233*5
算法思路
- 首先还是构造好一个素数表 prime_list
- 遍历prime_list,从小到大开始寻找即是n约数,找到就加入到res这个列表,n/这个素数,在从头开始遍历prime_list
代码示例
Python
pt_list = [True] * 1000 # 筛表
prime_list = [] # 素数表
def isPrime(n):
if not pt_list[n]:
return False
prime_list.append(n)
for idx in range(n ** 2, len(pt_list), n):
pt_list[idx] = False
return True
def resolvePrime(n):
res = []
while True:
for x in prime_list:
if n % x == 0 and x < n:
res.append(x)
n //= x
break
elif x == n:
res.append(x)
return res
# 构建好prime_list
for x in range(2, 1000):
isPrime(x)
print(resolvePrime(90))
Java
import java.util.ArrayList;
import java.util.List;
public class 分解质因数 {
static List<Integer> prime_list; // 素数表
static boolean[] pt_arr; // 筛表
static void init() {
pt_arr = new boolean[1000];
prime_list = new ArrayList<Integer>();
for (int i = 0; i < pt_arr.length; i++) {
pt_arr[i] = true;
}
// 构造素数表 prime_list
for (int i = 2; i < 1000; i++) {
if (isPrime(i)) {
prime_list.add(i);
}
}
}
static boolean isPrime(int n) {
if (!pt_arr[n]) {
return false;
}
for (int i = n * n; i < pt_arr.length; i += n) {
pt_arr[i] = false;
}
return true;
}
static List<Integer> resolvePrime(int n) {
List<Integer> res = new ArrayList<Integer>();
while (true) {
for (Integer x : prime_list) {
if (n % x == 0 && x < n) {
res.add(x);
n /= x;
break;
} else if (x == n) {
res.add(x);
return res;
}
}
}
}
public static void main(String[] args) {
// 初始化
init();
System.out.println(resolvePrime(90));
}
}
内容总结
以上是互联网集市为您收集整理的[算法]分解质因数全部内容,希望文章能够帮你解决[算法]分解质因数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。