主题:孪生漂亮数...
编程小菜菜
[专家分:90] 发布于 2007-07-29 17:40:00
[em18]我..太菜...
一个自然数, 若它的质因数至少是两重的(相同的质因数至少个数为二个, 如36=2*2*3*3)则称该数为"漂亮数". 若相邻两个自然数都是"漂亮数", 就称它们为"孪生漂亮数". 例如8与9就是一对. 请编程再找出一对"孪生漂亮数".
TELL ME!
谢了!
回复列表 (共7个回复)
沙发
Matodied [专家分:7560] 发布于 2007-07-29 20:25:00
288、289
(288=2*2*2*2*2*3*3)
(289=17*17)
板凳
编程小菜菜 [专家分:90] 发布于 2007-07-29 20:38:00
我要知道怎么编..[em18]
3 楼
Matodied [专家分:7560] 发布于 2007-07-29 21:01:00
算法:
先分解出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 楼
编程小菜菜 [专家分:90] 发布于 2007-07-29 21:15:00
非常感谢!!!分给你!
就是下次能不能用小写写啊?//
5 楼
Matodied [专家分:7560] 发布于 2007-07-29 21:20:00
我不推荐用小写。
推荐让PASCAL保留QB的风格,所有的保留字和标准标识符都要用大写,自定义标识符(如变量)用小写,这样可以区分。
maxumi不是说过编程风格很重要吗?哪怕麻烦一点,多按几次Caps Lock也要讲究风格。
6 楼
编程小菜菜 [专家分:90] 发布于 2007-07-29 21:33:00
xiexie !!!!!
7 楼
编程小菜菜 [专家分:90] 发布于 2007-07-29 21:34:00
再帮我做我刚发的'菜题'!!谢谢!
我来回复