Здесь я хочу найти сумму всех простых чисел ниже двух миллионов.
Я использую сито Эратосфена, поэтому мне нужен массив из двух миллионов.
Сначала я объявляю массив только как глобальную переменную, но zsh дает мне ошибку сегментации. Так что я попробовал malloc, но ошибка все еще там.
Я уже тестирую небольшой массив, программа работает нормально.
Кроме того, я использую clang-1000.10.44.2, с -O2 программа может работать, но ответ неверный. Код ниже.
#include <stdio.h>
#include <stdlib.h>
#define MAXN 2000000
unsigned long long sum;
void erat(int maxn, char *flag)
{
flag[0] = 0;
flag[1] = 0;
for(int i = 2; i < maxn; i++)
if(flag[i])
for(int j = i * i; j < maxn; j+=i)
flag[j] = 0;
}
int main()
{
int i;
char *flag = (char*) malloc(MAXN * sizeof(char));
for(i = 0; i < MAXN; i++)
flag[i] = 1;
erat(MAXN, flag);
for(i = 0; i < MAXN; i++)
if(flag[i]) sum+=i;
printf("%llu\n", sum);
return 0;
}
Надеюсь, кто-нибудь может мне помочь, спасибо за ваше время!