题解 | #质数因子#
质数因子
https://www.nowcoder.com/practice/196534628ca6490ebce2e336b47b3607
解题思路
- 对输入的整数进行质因数分解
- 基本思路:
- 从最小的质数2开始尝试除数
- 如果能整除,则输出这个质数,并继续用它除
- 如果不能整除,则尝试下一个数
- 优化:
- 只需要尝试到sqrt(n),因为如果n是合数,至少有一个质因子小于等于sqrt(n)
- 最后如果剩余的数大于1,说明它本身就是质数,需要输出
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
for(int i = 2; i * i <= n; i++) {
while(n % i == 0) {
cout << i << " ";
n /= i;
}
}
if(n > 1) {
cout << n << " ";
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int i = 2; i * i <= n; i++) {
while(n % i == 0) {
System.out.print(i + " ");
n /= i;
}
}
if(n > 1) {
System.out.print(n + " ");
}
}
}
n = int(input())
i = 2
while i * i <= n:
while n % i == 0:
print(i, end=' ')
n //= i
i += 1
if n > 1:
print(n, end=' ')
算法及复杂度
- 算法:试除法进行质因数分解
- 时间复杂度:
- 只需要尝试到
的因子
- 空间复杂度:
- 只需要常数级额外空间