回 帖 发 新 帖 刷新版面

主题:[讨论]请大家帮忙看一个分解质因数的程序,帮忙找一下错误

设计一个函数用来找出某个数的所有质因数,并实现从大到小输出
例如:30
      结果:5 3 2
//stack.h

 #ifndef STACK_H
 #define STACK_H

 #include<iostream>
 #include<stack>

 using namespace std;
 stack<int> reclipt (int n);
 int pan(int i);
 #endif

//eclipt.cpp
#include"STACK.h"

 int pan(int i)  //获得质数,如2,3,5,7,11,13……
 {if(i==2)
     return 1;
     for(int j=2;j<i;j++)
     {if(i%j==0)
      return 0;
     }
     return 1;
 }

stack<int> reclipt (int n)//分解出质因数

{stack<int> sta;
 int temp=n;
 int i=2;
 while(i>=temp)
 {while(pan(i))
     i++;
  if(temp%i==0)
  { 
      temp=temp/i;
      sta.push(i);
  }
        else
      {
          i++;
      }
 }
 sta.push(temp);
 return sta;
}

//main.cpp

#include"stack.h"
int main()          //主函数部分
{
    stack<int> st;
    int m=25;
    st=reclipt(m);
    while(st.empty() )
    {    cout<<st.top()<<" ";
        st.pop ();
    }
    return 0;
}

回复列表 (共2个回复)

沙发


好像不用这么麻烦
n 是你要判断的数
for(int i<sqrt(n);i=2;i--)
{
     判断n和i取余是否为0; 为0,i则为约数
     for(int j <sqrt(i);i=2;i--)
     {
    判断i和j取余是否不为0,不为0,j则为质因数
     }
}

板凳

谢谢,虽然之前我也发现那个循环条件使得程序效率差,但是还是谢谢你关注我的贴子...这个程序的主要问题在昨天我也找出来了

我来回复

您尚未登录,请登录后再回复。点此登录或注册