[英]Prime factorization of integer in c++
我正在尝试编写一个代码,它给出给定整数的质因数分解。 这是我的代码:
#include <iostream>
#include <cmath>
using namespace std;
void primefactor(int a);
int main()
{
int n;
cout<<" Enter the value of n "<<endl;
cin>>n;
primefactor(n);
return 0;
}
void primefactor(int a){
while(a%2==0){
cout<<"2*";
a/=2;
for(int i=3; i<=sqrt(a); i+=2){
while(a%i==0){
cout<<i<<"*";
a=a/i;
}
}
if(a>2){
cout<<a<<endl;
}
}
然而,当我在最后一个因子上运行输出时,我在分解中得到了一个额外的 *。 我怎样才能删除它?
我遇到了同样的问题并用goto语句解决了它。
#include <iostream>
#include <math.h>
using namespace std;
void primeFactorization(int number) {
cout << number << ": ";
// WHILE number is even
while (number % 2 == 0) {
// SET number = number / 2
number = number / 2;
// PRINT 2
cout << 2 << " " ;
// END WHILE
}
// GOTO TERMINAL
reloop:
// FOR factor in 3 to the sqrt(number), by 2
for (int factor = 3; factor <= sqrt(number); factor = factor + 2) {
// IF number modular factor equals 0 THEN
if (number % factor == 0) {
// PRINT factor
cout << factor << " " ;
// SET number = number / factor
number = number / factor;
// GOTO INITIAL
goto reloop;
// END IF
}
// END FOR
}
//IF number > 2 THEN
if (number > 2) {
//PRINT number
cout << number;
//END IF
}
cout << endl;
}
int main() {
int usersNumber;
bool userWants2Play = true;
while (userWants2Play) {
cout << "Please enter a number to be factored: " ;
cin >> usersNumber;
primeFactorization(usersNumber);
cout << "Do you want to play again? 1 or 0: " ;
cin >> userWants2Play;
}
return 0;
}
goto语句允许新的奇数再次通过循环。 这让奇数质因数打印,并允许新的旧数再次因数分解,如果该因数存在。
如果这有帮助,请告诉我! 我认为它没有错误。
您可以使用
if (a != 2)
cout<<"2*";
else
cout<<"2";
而不是cout<<"2*";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.