回 帖 发 新 帖 刷新版面

主题:孪生漂亮数...

[em18]我..太菜...
一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如36=2*2*3*3)则称该数为"漂亮数".  若相邻两个自然数都是"漂亮数", 就称它们为"孪生漂亮数". 例如8与9就是一对. 请编程再找出一对"孪生漂亮数".

TELL ME!
谢了!

回复列表 (共7个回复)

沙发

288、289

(288=2*2*2*2*2*3*3)
(289=17*17)

板凳

我要知道怎么编..[em18]

3 楼

算法:

先分解出n所有不同的质因数(比如288的不同的质因数有2和3),接着判断:如果这个数是“漂亮数”,那么它一定能被它所有不同的质因数的乘积的平方整除。

比如288的不同的质因数是2和3,2*3=6,所以判断288是不是“漂亮数”,只需要判断它能不能被6的平方(36)整除,288能被36整除,所以它是“漂亮数”。

每检查到一个“漂亮数”,就看看这个数加1的和是不是“漂亮数”,如果是,那么“孪生漂亮数”就找到了。

程序:(288和289是除了8和9之外的最小的孪生漂亮数)
VAR
   i, j, k, l, s: INTEGER; f, f0, ff: BOOLEAN;
BEGIN
    i := 10;
    REPEAT
         s := 1;
         f := FALSE;
         FOR j:=2 TO i - 1 DO BEGIN
             IF i MOD j = 0 THEN BEGIN
                f0 := TRUE;
                FOR l:=2 TO TRUNC(SQRT(j)) DO BEGIN
                    IF j MOD l = 0 THEN f0 := FALSE;
                END;
                IF f0 THEN s := s * j;
             END;
         END;
         IF (i MOD SQR(s) = 0) AND (s <> 1) THEN f := TRUE;
         IF f THEN BEGIN
            k := i + 1;
            s := 1; f := FALSE;
            FOR j:=2 TO TRUNC(SQRT(k)) DO BEGIN
                IF k MOD j = 0 THEN s := s * j;
            END;
            IF (k MOD SQR(s) = 0) AND (s <> 1) THEN f := TRUE;
            IF f THEN BEGIN
               WRITELN(i, ' ', k);
               ff := TRUE;
            END;
         END;
         INC(i);
    UNTIL ff;
END.

4 楼

非常感谢!!!分给你!
就是下次能不能用小写写啊?//

5 楼

我不推荐用小写。

推荐让PASCAL保留QB的风格,所有的保留字和标准标识符都要用大写,自定义标识符(如变量)用小写,这样可以区分。

maxumi不是说过编程风格很重要吗?哪怕麻烦一点,多按几次Caps Lock也要讲究风格。

6 楼

xiexie !!!!!

7 楼

再帮我做我刚发的'菜题'!!谢谢!

我来回复

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