题目描述
考点:试除法求质因数
模板:
for(int i = 2; i <= n / i; i++)
{
if(n % i == 0)判断这是一个因数,根据数学知识,如果这是一个因数,那肯定也是一个质数
{
int s = 0;数这个因数的指数
while(n % i == 0) s++,n /= i;除多少次就证明有多少次
cout<<i<<" "<<s<<endl;打印一个质因数和这个质因数的指数
}
}
if(n > 1) cout<<n<<" "<<1<<endl;如果存在一个大于根号n的质因数,就打印出来
对于这个模板说几点:
1.取到根号n得原因是:一个数不可能由一个小于根号n,一个大于根号n得质数相乘组成。反证法即可:若有,乘积一定大于n,因此假设不成立。
2.为什么只要满足 n % i == 0,i一定是质因子。因为下面n不断除以i,在2-i - 1的时候把i得因子全都筛掉了。
针对这道题要打印一下:
要特殊处理一下,拿个变量记录一下即可。
ac代码:
#include <iostream>
using namespace std;
int n;
int main()
{
while(cin >> n)
{
int AllTheFirst = 0;
cout << n << " = ";
for(int i = 2; i <= n / i; i++)
{
if(n % i == 0)
{
int s = 0;
while(n % i == 0)
{
s++;
n /= i;
}
if(AllTheFirst == 0)
{
AllTheFirst = 1;
s--;
cout << i;
}
while(s--)
{
cout << " * " << i;
}
}
}
if(n > 1 && AllTheFirst == 1) cout << " * " << n << endl;
else if(n > 1 && AllTheFirst == 0) cout << n << endl;
else cout << endl;
}
}