题目描述
给定一个正整数
n
n
n,请将它分解为素数的乘积。
例如 60=2×2×3×5
输入格式
单个整数表示
n
n
n
输出格式
若干整数表示
n
n
n 的素因子,按照从小到大的顺序输出。
数据范围
2≤
n
n
n≤1000000000
样例数据
输入:
60
输出:
2 2 3 5
输入:
3
输出:
3
分析:
思路一:
有一种投机取巧的方法,初测过了,可以把1000以内的素数全存到数组,就完全够应付初测所有样例。但样例一特殊,就歇菜了
代码:
100分:
#include<bits/stdc++.h>
using namespace std;
bool check(int x){
for(int i=2;i*i<=x;++i){
if(x%i==0){
return false;
}
}
return true;
}
int main(){
long long x,a[1010],k=1;
scanf("%lld",&x);
for(int i=2;i<=1000;++i){
if(check(i)){
a[k++]=i;
}
}
int s=1;
while(x>1){
while(x%a[s]==0){
cout << a[s] << " ";
x/=a[s];
}
s++;
}
return 0;
}
思路二:
从1枚举至
n
\sqrt n
n
,找到一个输一个,最后再把那一个大于
n
\sqrt n
n
的因子(也有可能没有,所以要先判断一下)输出。
代码:
100分
#include <bits/stdc++.h>
using namespace std;
long long n;
int main(){
cin>>n;
long long s=n;
for(int i=2;i*i<=n;++i){
while(s%i==0){
cout<< i <<" ";
s/=i;
}
}
if(s!=1){
cout<< s;
}
cout<< endl;
return 0;
}