Почему алгоритм не работает на больших числах?

#include <stdio.h>
#include <stdlib.h >  
#include <string.h>
#include <math.h>
#include <locale.h>
#pragma warning(disable : 4996)
unsigned long long* numer;
unsigned long long* resheto;
unsigned long long mnoj(unsigned long long m) {
    resheto = (unsigned long long*)calloc(m, sizeof(unsigned long long));
    unsigned long long q = 0; unsigned long long a = 0; unsigned long long qq = 1;
    for (unsigned long long i = 0; i < m; i++) {
        resheto[i] = i;//ошибка
    }
    for (unsigned long long i = 2; i * i <= m; i++) { //само решето
        for (unsigned long long k = i * i; k <= m; k += i) {
            resheto[k] = 1;
            
            
        }
    }
    
    
    unsigned long long flag = 0; a = 2;
    for(unsigned long long i =1;i<m;i++) {
        if (resheto[i] != 1) {
            unsigned long long z = m % resheto[i];
            if (z != 0) {
                resheto[i] = 1;
                
            }
            
        }
        
            //printf("%llu ", resheto[i]);
        qq *= resheto[i];
    }
    return qq;
}

Почему код не работает на больших числах? хочу протестировать на 2^64 -1 но выдает ошибку : Вызвано исключение: нарушение доступа для записи. resheto было 0x1110112. что это ? что ему не так?


Ответы (1 шт):

Автор решения: Qwertiy

А кто будет проверять, что calloc вернул 0? Такой объём памяти выделить невозможно даже для 64-битного процесса.

→ Ссылка