static void report_factor(uint32_t subseq, uint32_t n, uint64_t p) { uint64_t k; int64_t c; k = SEQ[SUBSEQ[subseq].seq].k; c = SEQ[SUBSEQ[subseq].seq].c; if (check_opt && !is_factor(k,c,n,p)) error("%"PRIu64" DOES NOT DIVIDE %s.",p,kbnc_str(k,base,n,c)); factor_count++; remaining_terms--; SUBSEQ[subseq].mcount--; if (SUBSEQ[subseq].mcount == 0) notify_event(subsequence_eliminated); if (p < min_factor_to_report) return; record_factor_time(); save_factor(k,c,n,p); report("%"PRIu64" | %s",p,kbnc_str(k,base,n,c)); }
int is_prime(ULONG number) { ULONG c = number / 2; if(c % 2 == 0) c++; for(c; c > 1; c -= 2) { if(is_factor(c, number)) return 0; /* is not a prime */ } return 1; /* is a prime */ }
static void report_duplicate_factor(uint32_t seq, uint32_t n, uint64_t p) { uint64_t k; int64_t c; k = SEQ[seq].k; c = SEQ[seq].c; if (check_opt && !is_factor(k,c,n,p)) error("%"PRIu64" DOES NOT DIVIDE %s (duplicate).",p,kbnc_str(k,base,n,c)); if (p >= min_factor_to_report && n <= n_max) report("%"PRIu64" | %s (duplicate)",p,kbnc_str(k,base,n,c)); }
void main() { ULONG i = NUMBER / 2; ULONG half = NUMBER / 2; if(i % 2 == 0) i++; for(i = 1; i < half; i += 2) { //printf("number: %lu\n",i); if(is_factor(i, NUMBER)) { printf("factor number: %lu\n",i); if(is_prime(i)) { printf("\tprime number: %lu\n",i); //break; } } } printf("largest prime factor=%lu\n",i); }