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( vfor  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- ?( W2 X5 R- c( c6 n6 i
    c=sum(myfun(b)); %求b的真因数和
/ a' z6 r2 Z! R; C# e5 Y8 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 efor 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; Jend
) A, ]. a5 [# n9 P& m1 yy = sum( unique(y1) );   5 [! N) z4 Z8 l  Q
end




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2