zoukankan      html  css  js  c++  java
  • 利用matlab实现以下功能:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

    程序思路:

    对n进行分解质因数,应先找到一个最小的质数k,从2开始,然后按下述步骤完成:
    (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
    (2)如果n不等于k,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行 (1)。 

    Matlab实现的程序如下:

    clear all

    n=input('pelase input the number:')                     %保存输入的值

    m=2;                                                                %从最小的质数2开始
    display([num2str(n),'='])

    while(1)
          if(~mod(n,m))                                              %找到可以整除的数
                  k=m;
                  if(n==k)                                               %找到最后一个质数
                        display([num2str(n)])
                        break;                                            %跳出循环
                  else
                        n=n/k;                                           %将n除以质数的值继续循环
                        m=1;                                             %保证质数还是从2开始
                        display([num2str(k),'*'])                  %将分解的质数显示出来
                  end
          end
         

          m=m+1;                                  %不用担心m是不是质数,因为能被4或6等整除的,肯定能被2或3这些小的质数整除
    end

    也可以从另外一个角度写这个程序:

    (1)判断这个数n本身是不是质数,如果是,则直接打印出来;

    (2)如果这个数n不是质数,则找到它最小的质数k,并用n=n/k进行更新,重复(1)过程,直到满足最后的n是个质数。

    本程序存在的问题是:输出不在同一行,如

    pelase input the number:77
    77=
    7*
    11

    pelase input the number:11
    11=
    11

    所以如果有好的方法,可以积极留言~~

  • 相关阅读:
    JSTL 配置
    HTML5 移动端web
    PHP 和 AJAX MySQL
    js php 互调
    google F12
    Codechef TRIPS Children Trips (分块、倍增)
    BZOJ 1859 Luogu P2589 [ZJOI2006]碗的叠放 (计算几何)
    AtCoder AGC002E Candy Piles (博弈论)
    BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
    AtCoder AGC001F Wide Swap (线段树、拓扑排序)
  • 原文地址:https://www.cnblogs.com/cxmhy/p/4094356.html
Copyright © 2011-2022 走看看