R语言自学篇2:函数循环练习及编写程序计算500以内相邻素数的差的上界

1.while()循环语句的使用:计算并输出小于等于1000的斐波那契数:

#while()循环语句的使用:计算并输出小于等于1000的斐波那契数
F<-c()
F[1]=1
F[2]=1
i=2
while(F[i]<=1000){
  F[i+1]=F[i]+F[i-1]
  i=i+1
}
cat("前",i-1,"个斐波那契数列的值小于或等于1000\n")
#print(paste("前",i-1,"个斐波那契数列的值小于或等于1000\n"))
cat("值小于1000的斐波那契数为:\n")
F[-i]
  •  运行结果:

2.循环的嵌套,break、next语句练习

#循环的嵌套:构造4阶Hilbert矩阵
n<-4;x<-array(0,dim = c(4,4))
for (i in 1:n) {
  for (j in 1:n) {
    x[i,j]<-1/(i+j-1)
  }
}
x

#break()练习
x<-1:5
for (val in x) {
  if(val==3){
    break
  }
  print(val)
}

#next()练习
x<-1:5
for (val in x) {
  if(val==3){
    next
  }
  print(val)
}
  • 运行结果

3.编写程序计算500以内相邻素数的差的上界

素数的6k±1原则:

6k±1优化是一种在素数判断或特定数学分析中使用的优化方法。这里的“6k±1”指的是形如6k+1或6k-1(即6的倍数加减1)的整数形式。这种优化方法基于数学上的一些特性,特别是与素数分布和整数性质相关的特性。

  • 6k±1优化的意义
  1. 素数分布特性:在大于3的素数中,除了3本身外,所有的素数都可以表示为6k±1的形式。这是因为除了2和3以外的所有素数都必须是奇数,而奇数可以表示为6k±1(k为整数)的形式。这种表示方法有助于在寻找素数时减少不必要的检查,因为形如6k、6k+2、6k+3、6k+4的整数(分别对应偶数、2的倍数、3的倍数和2的倍数加2)都不可能是大于3的素数。
  2. 计算效率提升:在编写素数检测算法或进行与素数相关的数学分析时,利用6k±1优化可以显著减少需要检查的整数数量,从而提高计算效率。例如,在遍历整数以寻找素数时,可以跳过形如6k、6k+2、6k+3、6k+4的整数,而只检查形如6k+1和6k-1(即6k±1)的整数。
  • 应用场景
  1. 素数检测:在编写素数检测算法时,可以利用6k±1优化来减少不必要的计算。
  2. 数学分析:在进行与素数分布、整数性质等相关的数学分析时,6k±1优化也是一种常用的技巧。
  • 注意事项
  1. 需要注意的是,虽然形如6k±1的整数更有可能是素数,但并非所有形如6k±1的整数都是素数。因此,在使用6k±1优化时,仍然需要进行进一步的素数判断。
  2. 此外,6k±1优化主要适用于大于3的素数。对于2和3这两个最小的素数,需要特别处理。

代码: 

#综合练习题:试计算500以内相邻素数的差的上界
# 函数用于判断一个数是否为素数  (6k±1优化)
is_prime <- function(n) {  
  if (n <= 1) return(FALSE)  
  if (n <= 3) return(TRUE)  
  if (n %% 2 == 0 || n %% 3 == 0) return(FALSE)  
  i <- 5  
  while (i * i <= n) {  
    if (n %% i == 0 || n %% (i + 2) == 0) {  
      return(FALSE)  
    }  
    i <- i + 6  
  }  
  return(TRUE)  
}  

# 函数用于找出500以内的所有素数  
find_primes_under_500 <- function() {  
  primes <- numeric()  
  for (i in 2:500) {  
    if (is_prime(i)) {  
      primes <- c(primes, i)  
    }  
  }  
  return(primes)  
}  

# 计算相邻素数的差,并找出上界  
calculate_max_difference <- function(primes) {  
  differences <- diff(primes)  # 计算相邻元素的差  
  max_difference <- max(differences)  # 找出差中的最大值  
  return(max_difference)  
}  

# 调用函数  
primes_under_500 <- find_primes_under_500()  
max_diff <- calculate_max_difference(primes_under_500)  
cat("500以内相邻素数的差的上界是:", max_diff)
  • 运行结果: 

如有不足,请各位批评指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值