在列A中給定一個(gè)整數(shù)值,例如單元格A2,并且2 <= A2 <= 100,要在列B中(例如單元格B2)使用公式進(jìn)行判斷:如果列A中的值是素?cái)?shù),則返回“素?cái)?shù)”;否則,返回該數(shù)的素?cái)?shù)乘法分解式(其中小寫(xiě)的“x”表示乘法),如下圖1所示。

圖1
素?cái)?shù)也稱質(zhì)數(shù),是指在大于1的自然數(shù)中,除了1和它本身外不再有其他因數(shù)的自然數(shù)。
先不看答案,自已動(dòng)手試一試。
公式
公式1:
=IF(–(SUMPRODUCT(–(FLOOR(A2,ROW(INDIRECT(“$1:”&INT(SQRT(A2)))))=A2))=1),”素?cái)?shù)”,SUBSTITUTE(TRIM(Arry1&””&Arry2&” “&Arry3&””&Arry4&” “&Arry5&””&Arry6),” “,”x”))
其中定義了5個(gè)名稱,分別為:
名稱:Arry1
引用位置:=1+MATCH(1,–(MOD($A2,ROW(INDIRECT(“2:”&$A2-1)))=0),)
名稱:Arry2
引用位置:=IFERROR(1+MATCH(1,–(MOD(Sheet1!$A2/Arry1,ROW(INDIRECT(“2:”&Sheet1!$A2-1)))=0),),””)
名稱:Arry3
引用位置:=IFERROR(1+MATCH(1,–(MOD(Sheet1!$A2/Arry1/Arry2,ROW(INDIRECT(“2:”&Sheet1!$A2-1)))=0),),””)
名稱:Arry4
引用位置:=IFERROR(1+MATCH(1,–(MOD(Sheet1!$A2/Arry1/Arry2/Arry3,ROW(INDIRECT(“2:”&Sheet1!$A2-1)))=0),),””)
名稱:Arry5
引用位置:=IFERROR(1+MATCH(1,–(MOD(Sheet1!$A2/Arry1/Arry2/Arry3/Arry4,ROW(INDIRECT(“2:”&Sheet1!$A2-1)))=0),),””)
名稱:Arry6
引用位置:=IFERROR(1+MATCH(1,–(MOD(Sheet1!$A2/Arry1/Arry2/Arry3/Arry4/Arry5,ROW(INDIRECT(“2:”&Sheet1!$A2-1)))=0),),””)
真乃公式之王也!
公式2:
=IF(OR(AND(MOD(A2,1)=0,IFERROR(MOD(A2,$A$1:A1),1)<>0),A2=2),”素?cái)?shù)”,MATCH(0,MOD(A2,IFERROR((ROW($A$1:A1)-1)+
SEARCH(“素?cái)?shù)”,$B$1:B1),””)),0)&”x”&IF(LOOKUP(GCD(A2,A2/MATCH(0,MOD(A2,IFERROR((ROW($A$1:A1)-1)+
SEARCH(“素?cái)?shù)”,$B$1:B1),””)),0)),$A$1:A1,$B$1:B1)=”素?cái)?shù)”,GCD(A2,A2/MATCH(0,MOD(A2,IFERROR((ROW($A$1:A1)-1)+
SEARCH(“素?cái)?shù)”,$B$1:B1),””)),0)),LOOKUP(GCD(A2,A2/MATCH(0,MOD(A2,IFERROR((ROW($A$1:A1)-1)+
SEARCH(“素?cái)?shù)”,$B$1:B1),””)),0)),$A$1:A1,$B$1:B1)))
使用了GCD函數(shù),太神奇了!
公式3:
=IF((MATCH(TRUE,INT(A2/ROW(INDIRECT(“2:”&A2)))=A2/ROW(INDIRECT(“2:”&A2)),)+1)=A2,”素?cái)?shù)”, IF(VLOOKUP((A2/(MATCH(TRUE,INT(A2/ROW(INDIRECT(“2:”&A2)))=A2/ROW(INDIRECT(“2:”&A2)),)+1)),A:B,2,)=”素?cái)?shù)”,MATCH(TRUE,INT(A2/ROW(INDIRECT(“2:”&A2)))=A2/ROW(INDIRECT(“2:”&A2)),)+1&”x”&(A2/(MATCH(TRUE,INT(A2/ROW(INDIRECT(“2:”&A2)))=A2/ROW(INDIRECT(“2:”&A2)),)+1)),MATCH(TRUE,INT(A2/ROW(INDIRECT(“2:”&A2)))=A2/ROW(INDIRECT(“2:”&A2)),)+1&”x”&VLOOKUP((A2/(MATCH(TRUE,INT((A2/ROW(INDIRECT(“2:”&A2))))=A2/ROW(INDIRECT(“2:”&A2)),)+1)),A:B,2,)))
這個(gè)公式重復(fù)利用了以前的計(jì)算結(jié)果。如果規(guī)定數(shù)字只在單元格A2中,在單元格B2中使用公式判斷素?cái)?shù)或進(jìn)行乘數(shù)分解的話,那么這個(gè)公式就不適用了。
公式4:
=IF(OR(A2=2,A2=3,A2=5,A2=7),”素?cái)?shù)”,REPT(“2x”,LN(GCD(64,A2))/LN(2))&REPT(“3x”,LN(GCD(81,A2))/LN(3))&REPT(“5x”,LN(GCD(25,A2))/LN(5))&REPT(“7x”,LN(GCD(49,A2))/LN(7))&IF(A2/GCD(64,A2)/GCD(81,A2)/GCD(25,A2)/GCD(49,A2)=1,””,A2/GCD(64,A2)/GCD(81,A2)/GCD(25,A2)/GCD(49,A2)))
由于A2 <= 100,因此如果A2不是素?cái)?shù),則素?cái)?shù)因子必須<sqrt(100)或10。該公式在數(shù)字分解式后面會(huì)產(chǎn)生一個(gè)額外的“x”,此外,對(duì)于大于10的數(shù),該公式不會(huì)判斷為素?cái)?shù),但對(duì)于不是素?cái)?shù)的數(shù)會(huì)給出完美的因式分解相乘的式子。






