EDA365电子论坛网
标题:
求一个数的真因数。
[打印本页]
作者:
zophim
时间:
2020-5-21 11:21
标题:
求一个数的真因数。
2 G6 x: a) t& u; o# y: Y; B+ u
; }$ z( m3 m3 K. Z, b6 C3 L* _* z
这个是一个函数,求一个数的真因数
/ ]& j, S6 q' w: i
function y=myfun(n)
( O' u' Y9 z2 u' [
y1=[];
4 w$ V. x! I/ k8 s
for i=1:fix(n/2);
9 G8 [% E4 i3 t
if mod(n,i)==0;
- u3 b+ Q; O) C2 E1 X
y1=[y1,i,n/i];
4 G2 X5 L0 f; p' E8 c: d4 h! c
end
t* U; w( \+ \- w2 b7 X
end
' ]) l6 h! ]3 k( g1 D& u
y=unique(y1);
$ P k9 f1 V X* s2 Z& b
end
- z2 X6 t5 m& h0 ]3 V3 T* W
然后我用这个函数求1到1000的亲和数对
- o8 m8 T1 `6 X& r* `: t' G( v
for a=1:10000;
( m" x9 |0 n4 d r2 _
6 Q6 | e0 E( z. S: |! M
b=sum(myfun(a)); %求a的真因数和 为b
- K, A$ M: Y! o; h# v- ?( W
2 X5 R- c( c6 n6 i
c=sum(myfun(b)); %求b的真因数和
/ a' z6 r2 Z! R; C# e5 Y
8 C/ H$ ~7 P; v1 n& g6 q) ?
if c==a
' m1 K* M1 `" r; e. {- |+ A2 P
7 y s, G- P5 a* D) p
disp(a) %如果a的真因数和b的真因数相等 则输出a
6 `1 F/ s6 O! V! m# m m! i5 M
; L( y3 V3 y! t. \& G3 v2 a! O8 r
end
: m7 D$ \ x0 u
3 a; u5 O) g, G% s( u$ G
end
8 j; V5 o4 l8 B ^* q) c5 d4 z
; A; `7 ?7 _& B
2 K2 i- u6 E& H# w) w) V# j
/ o! }/ E6 h- d5 r3 J/ O
8 D2 C5 N. x. O
但是他不输出任何数,
1 k9 j9 \4 i/ q7 F+ ?( u
附上亲和数对
& L1 f+ L! ~% D+ D) v) S. u0 I2 t
亲和数是这样一对正整数a和b,使得a的所有真因子的和等于b,而b的所有真因子的和等于a。
) F* v' ~- Z* w* P4 ~9 N
就是220的真因子是1、2、4、5、10、11、20、22、44、55、110,它们的和是284;284的真因子是1、2、4、71、142,其和恰好是220。这是一对亲和数。
1 U# B* @% ^% M& L5 a' }( K( a1 e% r2 |
请教大神,非常感谢!
作者:
Taio
时间:
2020-5-21 13:22
5 k/ @, Y; Q0 T7 t2 g( ]" r
你可以用sum函数,另外i增大时会和此前的n/i数值上发生重复,直接去掉后者
3 p0 K3 c- ^6 `; P2 q0 J
改成
' M! ^' s- n ^3 p5 N3 x( k8 P- y
y1 = [];
. x& D0 Y5 s8 e
for i = 1:fix(n/2)
% S; e2 G( A9 A6 L: z% Q
if mod(n,i) == 0
# c0 C: i, F: a$ N% K
y1 = [y1,i];
( ], E- `$ }' g* t0 R6 c# t% O: W
end
9 y9 z8 a7 H0 O5 r" l2 Q; J
end
) A, ]. a5 [# n9 P& m1 y
y = sum( unique(y1) );
5 [! N) z4 Z8 l Q
end
欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/)
Powered by Discuz! X3.2