编写函数实现以下功能。
1、对于任意给定的一个数n,找出1到n之间的所有质数。
2、找出1000以内所有恰好能被两组不同质数相加得到的偶数(例如:12=5+7为一组不同的质数,14=7+7为一组相同的质数,18=5+13和18=7+11为两组不同的质数,56=3+53,56=13+43,56=19+37为三组不同的质数),输出结果包含偶数以及对应相加的质数本身。
library(purrr)#加载迭代包
zhishu=function(x){
f=function(x){
a=1:x
C=x%%a
if(sum(C==0)==2)
return(x)
else
return(NULL) }
a=unlist(map(1:x,f))
return(a)
} #任意给定数x找到1:x之间的所有质数
b=zhishu(1000)#1:1000之间的所有质数
#找出 1000 以内所有恰好能够被两组不同质数相加得到的偶数
new=function(a){
structure(list(zh1=a[1],zh2=a[2],he=a[3]),
class="hand")}
print.hand=function(x){
cat(x$zh1,"+",x$zh2,"=",x$he,"\n")
}
b=zhishu(1000)
zhishu1=function(b){
a=as.data.frame(t(combn(b,2)))
a$C=apply(a,1,sum)
w=table(a$C[a$C%%2==0 & a$C<=1000])#观察次数
e=as.data.frame(w[w==2])
mei=as.matrix(a[which(a$C %in% e[,1]),])
return(mei) }
mei=zhishu1(b)#返回矩阵
mei1=apply(mei,1,new)
由于输出比较多,感兴趣的小朋友运行代码就可以了