我正在尝试编写一个可以输出所有数字素因子的程序。我开始创建一个函数来检查一个因子是否为素数:
bool checkPrime() {
for (x = 1; x <= i; ++x) {
if (x % i != 0) {
return 1;
}
else {
return 0;
}
}
int main() {
cout << "Enter any positive number: " << endl;
cin >> n;
cout << "Prime Factors of " << n << " are: " << endl;
for (i = 1; i <= n; ++i) {
if (n % i == 0) {
for (x = 1; x <= i; ++x) {
cout << i << " ";
}
}
cout << "\n";
system("pause");
}
如何实现我的“checkPrime”功能来检查我是否运行:
cout << i << " ";
我认为问题是将checkPrime()
函数的布尔返回值打印为true
或false
。在这个答案中,我没有进入checkPrime()
函数的正确性。但为了您的目的,请使用以下内容。
std::cout << std::boolalpha << checkPrime() << std::noboolalpha << std::endl;
参考:https://en.cppreference.com/w/cpp/io/manip/boolalpha
我没有看你checkPrime()
函数,但理想情况下它应该接受n
作为参数。
checkPrime
以接受输入。main
中添加对函数的调用,并根据函数的返回值输出数字。bool checkPrime(int i)
{
// 1 and 2 are primes
if ( i < 2 )
{
return true;
}
if ( i % 2 == 0 )
{
return false;
}
// Check with only odd numbers.
// Division by even numbers is not necessary.
// Even numbers greater than 2 are not prime numbers.
// Also, you don't need to check for division by numbers greater than sqrt(i)
for (x = 3; x*x <= i; x +=2 )
{
if ( i % x == 0)
{
return false;
}
}
return true;
}
在main
:
for (i = 1; i <= n; ++i)
{
if (n % i == 0 )
{
if ( checkPrime(i) )
{
cout << i << " ";
}
}
}
您可以将两个if
语句组合成一个if
语句。
for (i = 1; i <= n; ++i)
{
if (n % i == 0 && checkPrime(i) )
{
cout << i << " ";
}
}