输入描述:
输入一个long型整数
输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。
示例1
输入:
180
复制
输出:
#include
#include<math.h>
using namespace std;
//判断某数是否是素数
bool ispreme(int a)
{
if(a<=1) return false;
int sqr=int(sqrt(a*1.0));
for(int i=2;i<=sqr;i++)
{
if(a%i==0)
return false;
}
return true;
}
int main()
{
//质数算法笔记中有提到,素数表的用法,就是将所有的素数列出来,如果该整数可以被整除,那么就是该数质数
long lon;
cin>>lon;
int prime[1000000];
int num=0;
for(long i=1;i<1000000;i++)
{
if(num>=1000000) break;
if(ispreme(i))
prime[num++]=i;
}
for(int i=0;i<1000000;i++)
{
while(lon%prime[i]==0)
{
cout<<prime[i]<<’ ';
lon=lon/prime[i];
}
}
return 0;
}
我们知道这样可能会超时,但是主要是想复习一下质因子求解的过程
直接求解质因子数吧
求x开平方内的质因子数
#include <stdio.h>
int main()
{
long x;
while (scanf("%ld", &x) != EOF) {
long i = 2, tmp = x;
while (i <= x && i * i <= tmp) {
while (x % i == 0) {
printf("%ld ", i);
x /= i;
}
++i;
}
if (x != 1) printf("%d ", x);//注意点细节问题,如果是只有一和他本身
putchar('\n');
}
return 0;
}