一、网址链接
牛客----https://www.nowcoder.com/ta/huawei
二、题目描述
①描述
功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围:1<=n<=2*10 9+14
②输入描述
输入一个整数
③输出描述
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。
④示例一
输入: 180
输出: 2 2 3 3 5
三、代码实现
①Java代码实现
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String str;
while ((str = bufferedReader.readLine()) != null) {
int number = Integer.parseInt(str);
StringBuffer sb = new StringBuffer();
for (int i = 2; i <= Math.sqrt(number); i++) {
if (number % i == 0) {
sb.append(i).append(" ");
number = number / i;
i--;
}
}
sb.append(number).append(" ");
System.out.println(sb.toString());
}
}
}
②C++代码实现
#include <iostream>
#include <math.h>
using namespace std;
int main(){
long long n;
cin>>n;
long long s=sqrt(n);
for(long long i=2;i<=s;i++){
while(n%i==0){
cout<<i<<" ";
n/=i;
}
if(n==1)break;
}
if(n!=1)cout<<n<<" ";
cout<<endl;
}
③C代码实现
#include <stdio.h>
int main(void){
int n;
while(scanf("%d", &n) == 1){
int tmp = n;
for(int i = 2; i * i <= tmp && n >= i; i++){
while(n % i == 0){
printf("%d ", i);
n /= i;
}
}
if(n - 1) printf("%d ", n);
putchar('\n');
}
return 0;
}