大榕树——让我们共成长!
大榕树 myDrs.org
您的位置:大榕树 \ 编程       |  Logo语言   |  Pascal语言   |  信息学奥赛   |  高考保送    |  HTML版本
|  Pascal语言>>Pascal入门>>求N的不同因数的个数         本站全文搜索: 友情提示:

求N的不同因数的个数
http://www.mydrs.org  1/25/2002  大榕树


一、问题描述
    任给一个自然数,求出这个自然数不同因数的个数 m
二、问题分析
    下面列举出若干个 n m 的值先看一看:
    n= 1 2 3 4 5 6 7 8 ……
    m= 1 2 2 3 2 4 2 4 ……
    显然,自然数 1 处于特殊地位;任何素数(大于 1,只有 1 和自己为自然数的因数)的因数个数都是 2;合数的因数个数 >2,究竟多大则较难寻找出规律来。为此,可以通过试除法来求出 m
三、算法设计
    n=1m=1,是特例:
    其他情况的处理如下:
    m:=2;
    for i:=2 to k do
      if n mod i=0 then m=m+2
    其中
      k:=trunc(sqrt(n))
  这里取 m=m+2 是因为如果发现 n 的一个小于 n 的因数,必然同时有一个大于 n 的因数。但对于 n 正好是完全平方数时,上述的 m 应减去 1
四、程序设计
  程序中根据输入的 n,输出因数个数 m
五、程序清单
Pascal
PROGRAM e102-1
  VAR
    n, i, j, k: longint;
    m: integer;
BEGIN
  REPEAT
    write('Input N=');
    readln(n);
    IF n<=0 THEN writeln('N>0!!')
  UNTIL n>0
  IF n=1 THEN writeln('N=',1:10,'M=',1)
  ELSE BEGIN
    j:=n;
    m:=2;
    K:=trunc(sqrt(j));
    FOR i:=2 to k DO
      IF j MOD i =0 THEN m:=m+2;
    IF j=sqr(k) THEN m:=m-1
    witeln('N=',j:10,'M=',m);
  END
END.
QBASIC:
CLS
DO
  INPUT "N=", n
  IF n > 0 THEN
    EXIT DO
  ELSE
    PRINT "N>0!!"
  END IF
LOOP
IF n = 1 THEN
  PRINT "N="; n, "M="; 1
ELSE
  m = 2
  k = INT(SQR(n))
  FOR i = 2 TO k
    IF n MOD i = 0 THEN m = m + 2
  NEXT
  IF SQR(n) = INT(SQR(n)) THEN m = m - 1
  PRINT "N="; n, "M="; m
END IF
END

问题扩展: 
    对自然数 n 作素因数分解。
    n 为素数时    n=1*n   (n>1)
    ②  为合数时    n=p1a1*p2a2*plnl
  基本算法与求 n 的因数办法一样,但每次用来除以 n 的质因数 P1 必须一直重复除 n ,直至 n MOD i <> 0 为止,则此时的质因数 P1 就完全从 n 中分解出来了。
程序清单:
Qbasic
CLS
INPUT n
DIM a(n)
m = n
FOR i = 2 TO n - 1
  k = 1
  DO WHILE k <> 0
   r = m MOD i
   IF r = 0 THEN
     t = t + 1
     a(t) = i
     m = m \ i
     'PRINT a(t);
   ELSE
     k = 0
   END IF
  LOOP
NEXT
PRINT n; "=";
IF t = 0 THEN
  PRINT " 1 *"; n
ELSE
  FOR i = 1 TO t
    IF i = 1 THEN
      PRINT a(i);
    ELSE
      PRINT "*"; a(i);
    END IF
  NEXT
END IF
END


来 源:淮安市信息技术教学教研网
共有3365位读者阅读过此文

  • 上篇文章ASCⅡ码字符串输出
  • 下篇文章Jsoi信息学奥林匹克友谊赛

  • 发送邮件
    保存页面 打印文章 HTML版本 发表评论

    □- 近期热门文章 □- 相关文章
    1. NOIP2006竞赛大纲 [8306]
    2. 七类高中生具有保送资格 [5910]
    3. NOI2006获奖选手名单 [4955]
    4. 关于举办NOIP2006模拟赛的通告 [4106]
    5. Turbo Pascal各语句运行速... [3594]
    6. Turbo王者归来新Delphi免费... [3181]
    7. IOI2006我国4名选手全部获得金... [2945]
    8. 关于APIO2007与IOI2007... [2763]
    9. noip倒计时 by 枯叶蝴蝶 [2683]
    10. 朱泽园:思想上的金牌更重要 [2168]
    求N的不同因数的个数
     

    关于本站 | 合作伙伴 | 联系方式
    大榕树 版权所有 ©1999-2006 www.myDrs.org 闽ICP备05000721号