- 热门类别 (Trending Categories)
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
MS Excel
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP物理学
化学
生物学
数学
英语
经济学
心理学
社会学
服装学
法学
- 精选阅读 (Selected Reading)
- UPSC IAS 考试笔记 (UPSC IAS Exams Notes)
- 开发者最佳实践 (Developer's Best Practices)
- 问答 (Questions and Answers)
- 有效的简历撰写 (Effective Resume Writing)
- 人力资源面试问题 (HR Interview Questions)
- 计算机术语表 (Computer Glossary)
- 人物介绍 (Who is Who)
史特默数 (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 个史特默数的问题。
我们还学习了如何计算一个数的质因数。我希望这篇文章有助于消除你对这个问题的所有疑问。