素数生成算法

Prime number generation algorithm

本文关键字:算法      更新时间:2023-10-16

请参考以下内容,并给出建议。

cout << "2" << endl;
cout << "3" << endl;
ofstream of("Primes.txt");
unsigned long prime = 0;
unsigned long i = 1;
for (i = 1; i < 100000; i++)
{
    prime = ((i*2)+(i+1) + (i % 2));
    of << prime << endl;
}
of.close();
return 0;

计算第n素数的部分完成公式

第n个素数被吐出来了但它的所有素数因子也被吐出来了

如何筛选列表并只找到质数。

5
7
11
13
17
19
23
25
29
31
35
37
41
43
47
49
53
55
59
61
65
67
71
73
77
79
83
85
89
91
95
97
101
103

好吧,我改变了一点方法-我将尝试实现今晚我要去写信息学考试了,但是这是我对一些素数的新实现。

vector<int> Primes;
bool IsPrime(int q)
{
    for(unsigned int i = 0; i < Primes.size(); i++)
    {
        if(q % Primes[i] == 0)
            return false;
    }
    return true;
}
int main()
{
    Primes.push_back(2);
    cout << "2" << " is prime" << endl;
    for (unsigned int i = 2; i < 1000000000; i++)
    {
        if(IsPrime(i))
        {
            Primes.push_back(i);
            cout << i << " is prime" << endl;
        }
    }
}

这确实给出了质数,但确实使用了很多内存。并且随着时间的推移随着矢量变长而变慢

在寻找(小)质数列表时,消除可被质数(2,3,5,7等)整除的数字是一个不太坏的主意,但您也应该使用新发现的质数,以确保列表中仅包含质数(不仅包括2,3,5,7,还包括那些通过:11,13,17等)

大质数(你不能计算的方式解释如果数字太大,你需要检查几乎所有的数字(比如每个4 - 5总之)从1到数检查),通常的方法是采取随机大数量和检查如果它通过了费马小定理说,3,5,7和11(这个概率是一个非'如果它通过了只有3、5、7和11是真的不可能的)。

查看费马的原数测试以获得更多的解释。

下面是最简单的逻辑:

//Prime Numbers generation in C++
//Using for loops and conditional structures
#include <iostream>
using namespace std;
int main()
{
int a = 2;       //start from 2
long long int b = 1000;     //ends at 1000
for (int i = a; i <= b; i++)
{
 for (int j = 2; j <= i; j++)
 {
    if (!(i%j)&&(i!=j))    //Condition for not prime
        {
            break;
        }
    if (j==i)             //condition for Prime Numbers
        {
              cout << i << endl;
        }
 }
}
}
  #include<stdio.h>
int main(void)
{int x,i,l;
printf("number of enter test casesn");
scanf("%d",&x);
if(x>10)
{
    return;
}
printf("enter the range(please do not enter 1)n");
int mx[20];
 for(i=0;i<x*2;i=i+2)
 {
     scanf("%d%d",&mx[i],&mx[i+1]);
     if(mx[i]==1)
     {
      return;
     }
     }
       for(l=0;l<x*2;l=l+2){
     check(mx[l],mx[l+1]);
   }
  return 0;
 }
void check(int m,int n)
  { //for checking number is prime number or not
  int j,k;
 int flag;
 for(j=m;j<=n;j++)
  {   flag=0;
for(k=2;k<j;k++)
   {
       if(j%k==0)
         {
         flag++;
         }
  }
     if(flag==0)
   {
      printf("n%dn",j);
    }
 }