给定一个整数x(x>=2,x∈int),求出x所有素因数。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int x,i=2;
cin>>x;
while(x!=1)
{
if(x%i==0)
{
cout<<i<<" ";
x/=i;
}
else i++;
}
return 0;
}
代码解释:
使目标整数不断整数一个从2开始的素数,直到自身的值为1.
可能疑问:
为什么这里能整除的数就一定是素数?
答:因为这里是从素数2从小到大开始整除,如果x不能被i整除才让i自增.当i为合数时,i一定可以被分解为几个小于自身的素因数nums,那么x在这之前就一定完全被这些nums整除,既然x已经完全被这些nums整除,那么x自然也就无法再次被i整除.举例来说,当x为45时,45可以被9整除,但上述代码运行的结果确是3 3 5,为什么没有9呢,是因为9可以被分解为3*3,x在之前已经反复被3整除,自然也不会被9整除了.