[英]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.