数学知识
素因数(或称素因子)在数论里是指能整除给定正整数的素数。根据算术基本定理,不考虑排列顺序的情况下,每个正整数都能够以唯一的方式表示成它的素因数的乘积。两个没有共同素因子的正整数称为互素。因为1没有素因子,与任何正整数(包括1本身)都是互素。只有一个素因子的正整数为素数。
将一个正整数表示成素因数乘积的过程和得到的表示结果叫做素因数分解。显示素因数分解结果时,如果其中某个素因数出现了不止一次,可以用幂次的形式表示。例如360的素因数分解是:
$ 360 = 2 * 2 * 2 * 3 * 3 * 5 = 2^3 * 3^2 * 5 $
其中的素因数2、3、5在360的素因数分解中的幂次分别是3,2,1。
分解质因数的方法是先用一个合数的最小质因数去除这个合数,得出的数若是一个质数,就写成两个质数相乘形式;若是一个合数就继续按原来的方法,直至最后是一个质数 。
#include<iostream>
using namespace std;
void find(int num)
{
for(int i = 2; i <= num / i;i++)
if(num % i == 0)
{
int s = 0;
while(num % i == 0) num /= i,s++;//质数 i 的 s 次方
cout<< i <<' '<< s <<endl;//输出 i 和 s
}
if(num>1) cout<<num<<' '<<1<<endl;//当num没有变化的时候,输出本身和1
cout<<endl;//输出一行
}
int main()
{
int n;//输入的数字的数量
scanf("%d",&n);
while(n--)
{
int num;
scanf("%d",&num);
find(num);
}
return 0;
}
清晰明了 感谢%%%
粗体部分有句话是不是写错了?
“就写成这个合数相乘形式;”应该是“就写成这个质数相乘形式;”
因为前边有一个结论:每个正整数都能够以唯一的方式表示成它的素因数的乘积。
确实有一定的语病,多谢指正!