分解质因数
题目描述
今天数学课上,桐桐学习了质数的知识:一个正整数如果只能被1和它本身整除,那么这个整数便是质数。桐桐就想:任意一个正整数是否都能分解成若干个质数相乘的形式呢?输入一个正整数n,把它分解成质因子相乘的形式,如果为质数则输出该数本身。如:36=2×2×3×3;19=19。你能帮助桐桐解决这个难题吗?
输入
输入一个正整数n(2≤n≤109)
输出
把它分解成质因子相乘的形式,如果为质数则输出该数本身,乘数从小到大输出。
样例输入
复制样例数据
99
样例输出
99=3311
一开始,判断是素数的时候。应该5=5.我直接输出的5.真的是,以为我算法有问题。疯狂查找其他的算法。难得玩啊。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n,i,x;
int flag=0;
cin>>n;
x=sqrt(n);
for(i=2;i<=x;i++)
{
if(n%i==0)
{
if(flag==0)
cout<<n<<"=";
cout<<i<<"*";
flag=1;
n=n/i;
x=sqrt(n);
i=i-1;
}
}
cout<<n<<endl;
return 0;
}
上面是AC之前的。
下面是AC后的。
#include <iostream>
#include <cmath>
bool isprime(int n)
{
int i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
return false;
}
return true;
}
using namespace std;
int main()
{
int n,i,x,a;
int flag=0;
cin>>n;
x=sqrt(n);
a=isprime(n);
if(!a)
{
for(i=2;i<=x;i++)
{
if(n%i==0)
{
if(flag==0)
cout<<n<<"=";
cout<<i<<"*";
flag=1;
n=n/i;
x=sqrt(n);
i=i-1;
}
}
cout<<n<<endl;
}
if(a)
cout<<n<<"="<<n<<endl;
return 0;
}
菜鸟一枚,以前啥也没学。