今回は読みやすいようにループで記述しました
impl<T> Iterator for 素数生成Iterator<T>
 where T: Copy + num::Zero + num::One + num::CheckedAdd + std::cmp::PartialOrd,
{
 type Item = T;
 fn next(&mut self) -> Option<T> {
  '次候補: loop {
   self.新素数 = self.新素数.checked_add(&T::one())?;
   if self.新素数 == self.倍数[self.上限] {
     self.上限 += 1;
     if self.子.is_some() {
      self.素数.push(self.子.as_mut()?.next()?);
     }
     self.倍数.push(二乗(self.素数[self.上限]));
   }
   for index in 1..self.上限 {
     while self.倍数[index] != T::zero() && self.倍数[index] < self.新素数 {
      self.倍数[index] = self.倍数[index].checked_add(&self.素数[index]).unwrap_or(T::zero());
     }
     if self.倍数[index] == self.新素数 {
      continue '次候補;
     }
   }
   break;
  }
  if self.子.is_none() {
   self.素数.push(self.新素数);
  }
  Some(self.新素数)
 }
}