史特默数 (Stormer Numbers)


为了使 N 成为史特默数,表达式 N^2+1 的最大质因数必须大于或等于 2*N,并且它必须是一个正整数。

例如,4 是史特默数。因为 4*4+1=17 的最大质因数是 17 本身,它大于 8,即 2*4。

但是 3 不是史特默数,因为 3*3+1=10。10 的最大质因数是 5,它小于 6,即 2*3。

在这个问题中,我们得到一个正整数 N,我们的目标是打印前 N 个史特默数。

输入 (INPUT): 4

输出 (OUTPUT): 1 2 4 5

以下是前 4 个史特默数。3 不是史特默数,因此未包含在内。

算法 (Algorithm)

  • 找到数字 (N^2+1) 的最大质因数,并将其存储在任何变量中。

  • 检查质因数是否大于或等于 2*N

  • 如果满足条件,则它是一个史特默数。

  • 打印所有史特默数,直到 i 小于或等于 N。

方法 (Approach)

为了在我们的代码中实现上述算法,我们需要编写两个函数。第一个是为每种情况找出最大质因数,第二个是检查它是否大于或等于 2*N,并在同时打印该数字,如果它是一个史特默数。

为了找到每个数字 n 的表达式 (n^2+1) 的最大质因数 -

  • 我们将用 2 除以该数字,直到它给出余数 0,并将 2 存储在 primemax 中。

  • 现在,n 在此时必须是奇数,因此我们将只对从 i=3 到 n 的平方根的奇数整数进行迭代。

  • 现在将 i 存储在 primemax 中,并用 i 除以 n,而 i 可以整除 n。当 i 不能整除 n 时,将其加 2 并继续。

  • 如果 n 是质数且大于 2,则 n 不会通过之前的两个步骤变为 1,因此我们将 n 存储在 primemax 中并返回 primemax。

下一个函数将用于检查该数字是否是史特默数。如果是,我们将打印它。

  • 我们将声明一个变量 temp 为 0,以计算前 N 个史特默数。

  • 从 i=1 迭代到 temp 小于 N 为止。

  • 检查 (i*i+1) 是否具有大于或等于 2*i 的最大质因数。如果上述条件为真,则打印 i 并将 temp 加 1。

示例 (Example)

以下是上述方法在 C++ 中的实现 -

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

int prime_factor(int n){ //for finding the maximum prime factor
   int primemax=0;
   while(n%2==0){ //if n is divided by 2 than we store 2 in primemax 
      primemax=2;
      n=n/2;
   }
   for(int i=3;i<=sqrt(n);i+=2){ // this is only for odd number 
      while(n%i==0){
         primemax=i;
         n=n/i;
      }
   }
   if(n>2){ // when n is prime number and greater than 2 
      primemax=n;
   }
   return primemax;
}
void stormer_number(int n){  //function to print first n stormer numbers
   int temp=0; // for counting the stormer number 
   for(int i=1;temp<n;i++){  // for iterating the all number 
      int check=(i*i)+1;  // for storing the (i*i)+1 value in check
      if(prime_factor(check)>=(2*i)){ //for checking the number if maximum prime is greater or equal to 2*i
         cout<<i<<" ";
         temp++;
      }
   }
}
int main(){
   int n=9;
   stormer_number(n);
   
   return 0;
}

输出 (Output)

1 2 4 5 6 9 10 11 12

结论 (Conclusion)

在这篇文章中,我们尝试解决打印前 N 个史特默数的问题。

我们还学习了如何计算一个数的质因数。我希望这篇文章有助于消除你对这个问题的所有疑问。

更新于: 2023年3月14日

浏览量 263 次

开启你的 职业生涯

通过完成课程获得认证

开始学习 (Get Started)
广告 (Advertisements)