eratosthenes的列表筛

问题描述 投票:0回答:2

这里是一个从n到2n的数组中查找主数的程序。它可以正常工作,但必须采取其他措施:在此程序中,筛子叠加在阵列上:元素替换为零。应该是错误的:没有数组。首先,在链接列表中一一列出所有数字。然后从列表中删除那些包含多个链接的链接。最后,打印剩余的内容。 IDK如何在没有数组的情况下执行此操作。

#include <iostream>
using namespace std;


struct node 
{
    int num;
    node* next, * prev; 
};

class List  // list
{
    node* head, * tail; 
public:
    List() :head(NULL), tail(NULL) {};
    void Print();
    void Add(int num);
};

void List::Print() //print list
{
    node* temp = head;

    while (temp != NULL)
    {
        cout << temp->num << " ";
        temp = temp->next;
    }
    cout << endl;
}

void List::Add(int num)  //add to list
{
    node* temp = new node;
    temp->next = NULL;
    temp->num = num;
    if (head!=NULL)        
    {
        temp->prev = tail;
        tail->next = temp;
        tail = temp;
    }
    else
    {
        temp->prev = NULL;
        head = tail = temp;
    }
}



int main()
{

    List list;
    int n, num;
        cout << "Enter N :  "; cin >> n;
        n = abs(n);
    int* simp = new int[2 * n]; 
    // eratosphene's sieve
    for (int i = 0; i < 2 * n; i++) {
        simp[i] = i;
    }
    simp[1] = 0;
    for (int l = 2; l < 2 * n; l++) {
        if (simp[l] != 0) {
            for (int j = l * 2; j < 2 * n; j += l) {
                simp[j] = 0;
            }
        }
    }
    for (int i = n; i < 2 * n; i++) {
        if (simp[i]) {
            num = simp[i];
            list.Add(num);
        }
    }
    cout << "Prime numbers of the list:\n";
    list.Print(); 
    return 0;
}
c++ arrays list sieve-of-eratosthenes
2个回答
0
投票
sieve

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.