题目描述:
基础知识一:
算术基本定理
证明一:
证明循环里面的 i 一定是一个质数:
假如 i 是一个合数,那么它一定可以分解成多个质因子相乘的形式,这多个质因子同时也是 n 的质因子且比 i 要小,而比 i 小的数在之前的循环过程中一定是被条件除完了的,所以 i 不可能是合数,只可能是质数。
证明二:
证明最多只有一个大于根下n的质因子
反证:如果有两个或以上,相乘的积就大于n了
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
void divide(int x)
{
for(int i = 2; i <= x/i; i++)
if(x % i == 0) //x不包含任何从2到i-1之间的质因子(已经被除干净了)
//(n%i==0)所以i也不包含从2到i-1之间的质因子,由质数的定义可知,保证了i是质数
{
int s = 0;
while(x % i == 0)
x /= i, s++;
cout<< i << " " << s << endl;
}
if(x > 1)
cout<< x << " " << 1 << endl;
//最多只有一个大于根下n的质因子(两个相乘就大于x了)
cout<< endl;
}
int main(void)
{
int n;
cin>> n;
while (n -- )
{
int x;
cin>> x;
divide(x);
}
return 0;
}
祝我们都能天天快乐AC~