整数分解问题(二)

原创 2017年01月03日 11:21:50

我们一起来看看这个问题吧!上个问题我们已经接触过整数分解了,那么你有没有一定的了解了吗?

题意:输出N的整数分解

有没有感觉比上一题简单多了,没有脑筋急转和,题意粗暴明了,唯一让人头疼的是,怎么输出呢?

需要注意的是,如果幂为1次,则不需要输入该幂!如果幂超过两次,则需要用括号单独包起来

#include <iostream> 
#include <cmath> 
using namespace std; 
#define MAXI 20 
struct yinshu 
{ 
    int di; 
    int mi; 
}; 
struct Div 
{ 
    int xiangshu; 
    int xdi[MAXI]; 
    int xmi[MAXI]; 
}; 
Div getpN(int m); 
void vout(Div pN); 
yinshu getOne(int yin,int& m); 
int main() 
{ 
    int ncase,n,i; 
    cin>>ncase; 
    Div pN; 
    while(ncase--) 
    { 
        cin>>n; 
        pN=getpN(n); 
        cout<<n<<"="; 
        vout(pN); 
    } 
    return 0; 
} 
Div getpN(int m) 
{ 
    int i,j; 
    Div pans; 
    yinshu x; 
    if(m<2) 
    { 
        pans.xdi[0]=1; 
        pans.xmi[0]=0; 
        pans.xiangshu=0; 
        return pans; 
    } 
    int uplimit=(int)sqrt(m*1.0); 
    i=2; 
    j=0; 
    while(i<=uplimit) 
    { 

        if(m%i==0) 
        { 
            x=getOne(i,m); 
            pans.xdi[j]=x.di; 
            pans.xmi[j]=x.mi; 
            j++; 
            uplimit=(int)sqrt(1.0*m); 
        } 
        i++; 
    } 
    if(m>1) 
    { 
        pans.xdi[j]=m; 
        pans.xmi[j]=1; 
        j++; 
    } 
    pans.xiangshu=j; 
    return pans; 
} 
void vout(Div pN) 
{ 
    int i; 
    for(i=0;i<pN.xiangshu;i++) 
    { 
        if(pN.xmi[i]>1 && pN.xiangshu>1) 
        { 
            cout<<"("<<pN.xdi[i]<<"^"<<pN.xmi[i]<<")"; 
        } 
        else if(pN.xmi[i]<=1) 
        { 
            cout<<pN.xdi[i];  
        } 
        else if(pN.xiangshu==1) 
        { 
            cout<<pN.xdi[i]<<"^"<<pN.xmi[i]; 
            break; 
        } 
        if(i<pN.xiangshu-1) 
        { 
            cout<<"*"; 
        } 
    } 
    cout<<endl; 
} 
yinshu getOne(int yin,int& m) 
{ 
    yinshu x; 
    x.di=yin; 
    x.mi=0; 
    while(m%yin==0) 
    { 
        x.mi++; 
        m/=yin; 
    } 
    return x; 
} 


版权声明:本文为博主原创文章,未经博主允许不得转载。

整数因子分解问题

递归应用 《计算机算法设计与分析》课后练习题
  • GuoZLH
  • GuoZLH
  • 2016年03月13日 00:38
  • 1297

整数因子分解问题

#include "iostream" #include "algorithm" #include "fstream" using namespace std;/* h(n)为n的划分数 h(1) =...

整数因子分解问题

  • 2015年04月20日 10:50
  • 30KB
  • 下载

0048算法笔记——【随机化算法】拉斯维加斯随机化算法求解整数因子分解中的因子分割问题

问题描述      设n>1是一个整数。关于整数n的因子分解问题是找出n的如下形式的唯一分解式:。其中,p1如果n是一个合数,则n必有一个非平凡因子x,1给定一个合数n,求n的一个非平凡因子的问题称为...

整数因子分解问题

  • 2015年09月20日 01:31
  • 469B
  • 下载

贪心算法----正整数分解问题 和相同,乘积最大

转载自cxm_hy的博客,网址: http://www.cnblogs.com/cxmhy/p/4491009.html?utm_source=tuicool&utm_medium=referral ...

正整数分解使得乘积最大问题

一、问题描述 设n是一个正整数。现在要求将n分解为若干个自然数之和,使得自然数的成绩最大。输出这个最大的乘积。 要求: (1)要求这些自然数互不相同 (2)要求这些自然数可以是相同的   二、问题分析...

整数因子分解问题

Problem Description  大于1 的正整数n可以分解为:n=x1*x2*…*xm。 例如,当n=12 时,共有8 种不同的分式: 12=12; 12=6*2; 12=4*3; 12...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数分解问题(二)
举报原因:
原因补充:

(最多只允许输入30个字)