蓝桥杯试题集试题总汇(C++)
问题描述
输入一个整数,输出其所有质因子。
输入格式
输入只有一行,包含一个整数n。
输出格式
输出一行,包含若干个整数,为n的所有质因子,按照从小到大的顺序排列。
样例输入
6
样例输出
2 3
数据规模和约定
1<=n<=10000。
分析
这道题思想很简单,搞个for循环,依次判断是否为n的质因数并输出质因数就OK了。这里讲一下如何写能减少代码的运行时间。
首先在判断质数的时候,可以先去除偶数,因为偶数都是都不是素数(除了2),然后for循环的终止条件设为i<=sqrt(n),i+2以减少循环,另外在求解质因数时,先判断输入的n是否为质数,质数的因数只有1和其本身,所以就直接返回。之后对于n求其质因数,终止条件可以设为i<n/2,减少循环。
参数代码
#include<iostream>
#include<math.h>
using namespace std;
bool zhishu(int n)//质数判断
{
if(n==2)
return true;
if(n%2==0)
return false;
for(int i=3;i<=sqrt(n);i=i+2)
{
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n;
cin>>n;
if(zhishu(n))
return 0;
for(int i=2;i<n/2;i++)
{
if(n%i==0&&zhishu(i))//判断i是否为n的质因数
{
cout<<i<<" ";
}
}
return 0;
}