我需要找到用户输入的数字的素因子
示例:
输入一个数字:1430。1430的主要因子是2,5,11,13
我不想使用我尚未涵盖的功能
这是我的代码
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std ;
int main ()
{
int count, i , i2 ;
int userInput, prime ;
bool flag = false ;
cout << "Enterr: " ;
cin >> userInput ;
cout << "The prime factors are: " ;
for (i = 2; i < userInput ; i++)
{
if (userInput % i == 0) // this for loop is to check is the counter (i) is a multiple of userInput
{
prime = i;
// the next for loop is to check is the multiple is a prime number
for( i2 = 2; i2< ceil(sqrt(prime)) ; i2++)
{
if (prime % i2 == 0)
flag = true ;
}
}
if (flag == false )
cout << i << ", " ;
flag = false ;
}
cout<< endl ;
return 0 ;
}
我的输出完全忽略第二个循环,只输出小于userInput
我能够创建一段代码来检查数字是否为素数:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std ;
int main ()
{
int userInput, prime ;
int i ;
bool flag = false ;
cin >> userInput ;
for( i = 2; i < static_cast<int>(sqrt(userInput) + 1) ; i++)
{
if (userInput % i == 0)
flag = true;
}
if (flag == false )
cout << "Number is a prime" << endl ;
else
cout << "Number is not a prime " << endl ;
return 0 ;
}
对不起,如果有任何错误。我还是C++
答案 0 :(得分:3)
你几乎就在那里 - 你只需要移动这个块
if (flag == false )
cout << i << ", " ;
flag = false ;
进入你的
if (userInput % i == 0)
阻止(您只想打印作为输入数字除数的数字),一切都应该没问题。
答案 1 :(得分:1)
如果你在找到它们时将它们除以你的数字,你就不需要测试你的除数的素数,同时按升序列举候选人:
for (i = 2; i <= userInput/i; )
{
if (userInput % i == 0)
{
cout << i << ", "; // i is a prime factor of the original
userInput /= i; // number in userInput
}
else
++i;
}
if (userInput > 1)
{
cout << userInput; // the biggest prime factor of the original
} // input number
因此,输入数字的主要因素也按升序打印出来。
答案 2 :(得分:0)
您是否尝试调试(甚至精神上)程序中发生的事情?我对此表示怀疑,或者您会注意到以下事项:
if (userInput % i == 0)
对所有除数都是假的。这意味着您将直接进入支票
if (flag == false )
这是真的,因为你没有将flag更改为true,因此你错误地将数字作为主要因素。
你也应该考虑角落案件。例如,素数的素因子只是素数本身(你永远不能输出它(i < userInput;
)
关于你的无功能限制:你无法避免功能或你的代码不会做任何事情。但是,您可以避免看起来像函数调用的东西(看起来像name()
)。
要消除sqrt
和ceil
,您应该将条件重新排列为i2 * i2 <= prime