生成第n码数的程序
Program to generate nth prime number
本文关键字:程序 更新时间:2023-10-16
#include<iostream.h>
#include<conio.h>
#include<stdio.h>
main()
{
clrscr();
int num,b,c,d,f,primeset[500],j=0;
cout<<"Enter Number (n): ";
cin>>num;
primeset[0]=2;
for(b=3;b<=1000;b++)
{
for(c=2;c<b;c++)
{
d=b%c;
if(d==0)
{
j=1;break;
}
else
{
j=0;
}
}
if(j==0)
{
for(f=1;f<500;f++)
{
primeset[f]=b;
}
}
else
{
//do nothing
}
}
cout<<"n th Prime is "<<primeset[num-1];
getch();
return 0;
}
这是我找到第n个素数的程序,但它不起作用,请给我带来帮助。请告诉我我的错误。 请告诉我,为什么我的程序不起作用,它为NUM = 1和997的所有其他值给出了2。告诉我错误和修复它们的代码。PS:我使用Turbo C
编辑:您不喜欢Eratosthenes的筛子,因此这是使用动态编程的另一种方法。这意味着您使用已经创建的一系列素数来决定下一个候选人是否是Prime。
ie如果您产生了素数[2,3,5,7],以确定是否可以计算出哪些第4(0(素数,如果候选人为8,9,10,11是否可以被当前的Primes清单排除。您一直从8点开始,直到候选人不再被已经存在的Prime
排除代码:
void createNextPrime(int* primes, int nextPrimeIndex) {
int primeCandidate=primes[nextPrimeIndex-1];
do {
primeCandidate++;
bool found=true;
for(int primeIndex=0;primeIndex<nextPrimeIndex;primeIndex++) {
if (primeCandidate%primes[primeIndex]==0) {
found=false;
break;
}
}
if (found) {
primes[nextPrimeIndex]=primeCandidate;
return;
}
}
while(true);
}
void createNPrimes(int primeCountToCreate) {
int primes[primeCountToCreate];
primes[0]=2;
for(int primeIndexToCreate=1;primeIndexToCreate<primeCountToCreate;primeIndexToCreate++) {
createNextPrime(primes,primeIndexToCreate);
}
for(int i=0;i<primeCountToCreate;i++) {
cout<< primes[i]<< " ";
}
cout<<endl;
}
编辑:
这是您的代码,已修复到工作:
int main()
{
clrscr();
int num,c,d,f,primeset[500],composite=0;
cout<<"Enter Number (n): ";
cin>>num;
primeset[0]=2;
f=1;
for(int candidate=3;candidate<=1000;candidate++)
{
composite=0;
for(c=2;c*c<=candidate;c++)
{
d=candidate%c;
if(d==0)
{
composite=1;
break;
}
}
if(composite==0)
{
primeset[f++]=candidate;
// Not sure what this did
/*for(f=1;f<500;f++)
{
primeset[f]=b;
} */
}
}
cout<<"n th Prime is "<<primeset[num-1]<<endl;
getch();
return 0;
}
您描述的问题称为主要分布问题,没有公式,因此我们留下了蛮力。
这意味着找出所有值是迭代所有值的唯一方法,尽管我们可以跳过所有偶数值,因为2是唯一的均值,我们有一个特殊情况。
#include <iostream>
bool isPrime(unsigned int number)
{
for (unsigned int i = 3; (i*i) <= number; i += 2)
{
if (number % i == 0)
return false;
}
return true;
}
unsigned int nthPrime(unsigned int n)
{
// Special case for checking for 1st prime which is 2.
if (n == 1)
return 2;
unsigned int counter = 1;
unsigned int number = 1;
while (counter < n)
{
number += 2;
counter += isPrime(number) ? 1 : 0;
}
return number;
}
int main(int argc, char** argv)
{
unsigned int num;
std::cout << "Nth Prime to calculate : ";
std::cin >> num;
std::cout << "Prime is " << nthPrime(num) << 'n';
return 0;
}
根据您希望使用的素数的大小,您可能会用32位未签名的INT用光范围。用long long
替换unsigned int
将走得更远,但是,素数可以很快变得非常大,因此即使这也不够。最终,您需要使用没有固定/有限长度的n位互机。在加密键中,这种情况是具有巨大值的巨大值,而C 中的基本类型。
n-bit Interger都超出了这个问题的范围,因此我将留给读者进行调查。
[edit:]请注意,您不能单独依靠isPrime(...)
函数,因为没有检查奇数/偶数或第一个素数的特殊情况。它设计用于与nthPrime(...)
函数一起使用。
这是逻辑
数字: - 输入号码素数为(2,3,5,7,11(
number=100;
nth= ? ;//enter the nth number prime u want
int a=2;
int count=0;
boolean status=true;
boolean success=false;
for(int i=a;i<=number;i++)
{
for(int j=2;j<i;j++)
{
if(i/j == 0)
status=false;
}
if(!status)
{
count++;
if(count == nth){
//print out nth prime number
success=true;
break;
}
}
if(!success){
//nth prime is beyond the limit
}
}
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- C++,系统无法执行指定的程序
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到
- 重载操作程序时出错>>用于类中的字符串 memebr
- 获取日期异步信号安全吗?如果在信号处理程序中使用,它会导致死锁吗
- 试图在visual studio上用C++创建一个桌面应用程序
- 模板元程序查找相似的连续类型名称
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 如何通过cpp程序运行shell脚本
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- IPC使用多个管道和分支进程来运行Python程序
- 如何将c++程序的一些输出传递给shell,以便在shell中使用
- 使用C++程序合并排序没有得到正确的输出
- 基于boost的程序的静态链接——zlib问题
- 程序崩溃并显示"std::out_of_range"错误
- 在C应用程序中运行C++(带有STL)函数
- 使用mongocxx驱动程序时包含头文件问题
- 如何在c++程序中找到函数的地址