在没有函数的情况下找到给定数字c ++的素因子

时间:2014-03-24 18:25:35

标签: c++ primes prime-factoring

我需要找到用户输入的数字的素因子

示例:

  

输入一个数字: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++

的初学者

3 个答案:

答案 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())。

要消除sqrtceil,您应该将条件重新排列为i2 * i2 <= prime