-
Notifications
You must be signed in to change notification settings - Fork 0
/
newsieve.c
101 lines (83 loc) · 2.73 KB
/
newsieve.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
//
// newsieve.c -- Create and initialize a new sieve. Sieve type selections go here.
//
// $RCSfile: newsieve.c,v $
//
// $Date: 2013/12/02 19:16:57 $
//
// $Author: chuck $
//
// $Id: newsieve.c,v 1.3 2013/12/02 19:16:57 chuck Exp $
//
//
// ChangeLog:
//
// $Log: newsieve.c,v $
// Revision 1.3 2013/12/02 19:16:57 chuck
// added rcs_file_version identification string
//
// Revision 1.2 2013/11/29 21:37:52 chuck
// Completed isolation of new sieve creation for pthread support
// added support for -nodelete
//
// Revision 1.1 2013/11/21 04:23:25 chuck
// Initial revision
//
//
static char *rcs_file_verson = "$Id: newsieve.c,v 1.3 2013/12/02 19:16:57 chuck Exp $";
//
// Global includes
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
// Local includes
#include "sieve.h"
#include "option.h"
int newsieve()
{
int i;
// Before asking for values, check what we got. If illegal, ignore them
if (optB && (B < 2 || B > 65536)) optB = 0;
if (optN && (N < 2 || N > 2000000000)) optN = 0;
if (optKmin && (Kmin < 1 || Kmin > 2000000000)) optKmin = 0;
if (optKmax && (Kmax < 1 || Kmax > 2000000000)) optKmax = 0;
New = 1;
do {
if (!optB) B = askint("Base", 2, 65535);
if (!optN) N = askint("N" , 2, 2000000000);
if (!optKmin) Kmin = askint("Kmin", 1, N-1);
if (!optKmax) Kmax = askint("Kmax", Kmin, N-1);
if (!optC) C = askint("C" , -2000000000,200000000);
if (optDelete) LogDelete = 1;
else if (optNoDelete) LogDelete = 0;
else LogDelete = askyesno("Log factored candidates?");
if (!optOutput) {
printf("Output Filename: "); fflush(stdout);
scanf("%s",OutputFilename);
strcpy (optOutputName,OutputFilename);
} else {
strcpy (OutputFilename,optOutputName);
}
printf("\nCreating new sieve for %d^%d - %d^K - %d (%d <= K <= %d),\n",
B,N,B,C,Kmin,Kmax);
printf("writing output to: '%s'\n",OutputFilename);
printf("with logging of factored candidates: ");
(LogDelete) ? printf("enabled\n") : printf("disabled\n");
if (optPmax) printf("with Pmax limited to: %lu\n", optMaxP) ;
else printf("with Pmax unlimited.\n");
printf("\n");
} while (!askyesno("ready to start?"));
Ksize = (Kmax - Kmin)+1;
Kbitmap = calloc(1,sizeof(type_k)*(Ksize+2));
// If unable to allocate the memory, print message & return error
if (Kbitmap == 0) {
fprintf(stderr,"Error: Unable to allocate memory for candidates\n");
fprintf(stderr," Requested number of candidates = %d\n",Ksize+2);
return (0);
}
// Ok, initialize the K list
for (i=0; i<Ksize; i++) Kbitmap[i] = 1;
// All set and ready to go
return(1);
}