假设A1的值是5:
1)先来看这个公式ROW(INDIRECT("1:"&A1)),(比如A1的值是5),
此公式简化后即是row(1:5),计算结果是{1,2,3,4,5},如果A1是其它数值依此类推,
2)于是问题中的公式简化为=IF(SUMPRODUCT((MOD(A1,{1,2,3,4,5})=0)+0)>2,"合数","质数")
3)再来看这个公式:(MOD(A1,{1,2,3,4,5})=0)+0,也就是A1分别与1,2,3,4,5相除,它们的结果的余数如果等于0即是true,不等于0即是false,于是公式简化为(true,false,false,false,true)+0,再经简化即变为{1,0,0,0,1},
4)于是问题中的公式就可以简化为=IF(SUMPRODUCT(1,0,0,0,1)>2,"合数","质数")
由此可再简化=IF(2>2,"合数","质数"),
很显然:结果是“质数”
这个公式包含多个函数,最外层是判断(IF)函数,
如果SUMPRODUCT((MOD(A1,ROW(INDIRECT("1:"&A1)))=0)+0)的结果大于2,返回合数,否则返回质数.
接下来分析SUMPRODUCT((MOD(A1,ROW(INDIRECT("1:"&A1)))=0)+0)
嵌套了4个函数,要知道每个函数的意义才能正确分析公式的计算过程.
ROW(INDIRECT("1:"&A1))用于生成,从1到A1的一组数字,例如A1的值是7就生成一组数字1.2.3.4.5.6.7.
mod(是求余数,A1的值和生成的那些数字相除,求余数,得到一组结果,例如A1是7,就得到一组余数,为0;1;1;3;2;1;0,
再比较这组余数是否等于0,等于0的返回真值,不等于0的返回假值,
最后用SUMPRODUCT计算出真值的个数
最后是if函数,结果大于2,就判断为合数,否则判断为质数.
例如A1=5
INDIRECT("1:"&A1)返回引用"1:5"
ROW(INDIRECT("1:"&A1))返回数组{1;2;3;4;5}
MOD(A1,ROW(INDIRECT("1:"&A1)))是用1,2,3,4,5分别除5所得余数构成数组{0,1,2,1,0}
MOD(A1,ROW(INDIRECT("1:"&A1)))=0返回{True,False,False,False,True}
(MOD(A1,ROW(INDIRECT("1:"&A1)))=0+0返回{1,0,0,0,1}
SUMPRODUCT((MOD(A1,ROW(INDIRECT("1:"&A1)))=0+0)对数组{1,0,0,0,1}个数求和返回2,
再用if判断,如果大于2就是合数,如果小于或等于2就是质数。
假设单元格b2:d2里是绩点3、3.5、4
在e3输入
=sumproduct(b$2:d$2,b3:d3)
就是你要的,公式可以向下复制。绩点可以改。
楼上解释得很详细了,公式还有缺陷,1被误判为质数,可改为
=TEXT(SUMPRODUCT((MOD(A1,ROW(INDIRECT("1:"&A1)))=0)+0),"[=1]非质非合;[>2]合数;质数")