簡體   English   中英

素數生成算法

[英]Prime number generation algorithm

請查看以下內容,看看您是否可以提供建議。

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 等)

對於更大的素數(如果數字太大,您就無法計算解釋的方式,因為您需要檢查從 1 到要檢查的數字的幾乎所有數字(無論如何說每個 4-5)),通常的方法是采取一個隨機的大數,並檢查它是否通過費馬小定理,比如 3,5,7 和 11(IIRC,如果它通過 3,5,7 和 11,它是非素數的概率真的是不可能的)。

查看Fermats 素性測試以獲得更多的解釋。

這是最簡單的邏輯:

//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 cases\n");
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%d\n",j);

    }

 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM