Может кто-нибудь помочь, пожалуйста, перевести код с джавы на С++?
На стандартном потоке ввода задаётся целое число N. На стандартный поток вывода напечатайте первые N простых чисел через пробел.
Формат входных данных Число N положительно и по модулю не превышает 10000. Формат результата На стандартный поток вывода напечатайте результат.
import java.util.Scanner;
import java.util.ArrayList;
public class P1 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in .nextInt();
ArrayList < Integer > a = new ArrayList < > ();
int d = 0;
for (int i = 2; i < Integer.MAX_VALUE; i++) {
boolean p = true;
if (i != 2 && i != 3) {
for (int j = 2; j <= Math.sqrt(i) + 1; j++) {
if (i % j == 0) {
p = false;
break;
}
}
}
if (p) {
a.add(i);
d++;
}
if (d == n) {
break;
}
}
for (Integer item: a) {
System.out.print(item + " ");
}
}
}
какое-то решение на С++
#include <bits/stdc++.h>
using namespace std;
struct elem {
int val;
elem *next;
};
elem *add(elem *head, int x) {
elem *p = new elem;
(*p).val = x;
p->next = head;
return p;
}
elem * findElem(elem* head, int n) {
int k = 1;
while (head) {
head = head->next;
k++;
if (k == n) {
return head;
}
}
}
void findElemAndNull(elem* head) {
head->val = 0;
}
void erot(elem *head, int n, int k) {
elem* p = head;
int countOfAns = 1;
for (int j = 2; j < n + 1; ++j) {
elem* t = findElem(p, j);
if (t->val != 0) {
cout << t->val << " ";
if (countOfAns == k) {
exit(0);
}
countOfAns++;
for (int l = j * j; l < n + 1; l += j) {
findElemAndNull(findElem(p, l));
}
}
}
}
elem *empty_list() {
return nullptr;
}
int main() {
elem *head = empty_list();
int const M = 105000;
int n;
cin >> n;
for (int i = M + 1; i > 0; i--) {
head = add(head, i);
}
erot(head, M, n);
return 0;
}