Я что-то упускаю, но не могу найти что. Мне также дали файл input2.c, и в нем есть функция print_prim, которую мне не разрешено изменять.
Для n=10 всегда печатается
4, 5, 7, 9,
Я знаю, что в функции print_prim есть i+2, но я не могу решить эту проблему. Опять же, мне не разрешено изменять функцию print_prim. Кто-нибудь может увидеть, что мне не хватает?
main.c
#include <stdio.h>
#include <stdlib.h>
#include "input2.h"
int main() {
int n = lese_int();
int laenge = n-1;
int *array;
array = malloc(sizeof(int) * laenge);
for (int i = 2; i <= n; i++) {
array[i] = 1;
}
for(int i=0;i<=n;i++) {
if(array[i] == 1){
for(int j = i ; i*j <= n ; j++){
array[i*j] = 0;
}
}
}
print_prim(array, laenge);
free(array);
return 0;
}
функция print_prim
void print_prim(int *array, int laenge) {
for (int i=0; i<laenge; i++) {
if (array[i] == 1) {
printf("%d, ", i+2);
}
}
printf("\n");
}
malloc(sizeof(int) * (n-1))
, но ваш цикл выполняется, покаi <= n
. Вы пишете 2 элемента слишком много. - person Holger   schedule 24.10.2018i*j <= n
будет меньшеleange
? - person Paul Ogilvie   schedule 24.10.2018print_prim
видно, что записи сдвинуты на 2. Это означает, что число 2 находится в индексе 0.for (int i = 2; i <= n; i++) {array[i] = 1;}
Это должно бытьarray[i-2]
одинаковым для всех обращений кarray
. - person Gerhardh   schedule 24.10.2018