xref: /llvm-project/polly/lib/External/isl/imath/examples/findprime.c (revision 658eb9e14264d48888ade0e3daf0b648f76c3f0e)
1*658eb9e1SMichael Kruse /*
2*658eb9e1SMichael Kruse   Name:     findprime.c
3*658eb9e1SMichael Kruse   Purpose:  Find probable primes.
4*658eb9e1SMichael Kruse   Author:   M. J. Fromberger
5*658eb9e1SMichael Kruse 
6*658eb9e1SMichael Kruse   Copyright (C) 2002-2008 Michael J. Fromberger, All Rights Reserved.
7*658eb9e1SMichael Kruse 
8*658eb9e1SMichael Kruse   Notes:
9*658eb9e1SMichael Kruse   Find the first prime number in sequence starting from the given value.
10*658eb9e1SMichael Kruse   Demonstrates the use of mp_int_find_prime().
11*658eb9e1SMichael Kruse 
12*658eb9e1SMichael Kruse   Permission is hereby granted, free of charge, to any person obtaining a copy
13*658eb9e1SMichael Kruse   of this software and associated documentation files (the "Software"), to deal
14*658eb9e1SMichael Kruse   in the Software without restriction, including without limitation the rights
15*658eb9e1SMichael Kruse   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16*658eb9e1SMichael Kruse   copies of the Software, and to permit persons to whom the Software is
17*658eb9e1SMichael Kruse   furnished to do so, subject to the following conditions:
18*658eb9e1SMichael Kruse 
19*658eb9e1SMichael Kruse   The above copyright notice and this permission notice shall be included in
20*658eb9e1SMichael Kruse   all copies or substantial portions of the Software.
21*658eb9e1SMichael Kruse 
22*658eb9e1SMichael Kruse   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23*658eb9e1SMichael Kruse   IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24*658eb9e1SMichael Kruse   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
25*658eb9e1SMichael Kruse   AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26*658eb9e1SMichael Kruse   LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27*658eb9e1SMichael Kruse   OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28*658eb9e1SMichael Kruse   SOFTWARE.
29*658eb9e1SMichael Kruse  */
30*658eb9e1SMichael Kruse 
31*658eb9e1SMichael Kruse #include <stdio.h>
32*658eb9e1SMichael Kruse 
33*658eb9e1SMichael Kruse #include "iprime.h"
34*658eb9e1SMichael Kruse 
main(int argc,char * argv[])35*658eb9e1SMichael Kruse int main(int argc, char *argv[]) {
36*658eb9e1SMichael Kruse   char buf[4096];
37*658eb9e1SMichael Kruse   mpz_t seed;
38*658eb9e1SMichael Kruse   mp_result res;
39*658eb9e1SMichael Kruse 
40*658eb9e1SMichael Kruse   if (argc < 2) {
41*658eb9e1SMichael Kruse     fprintf(stderr, "Usage: %s <start-value>\n", argv[0]);
42*658eb9e1SMichael Kruse     return 1;
43*658eb9e1SMichael Kruse   }
44*658eb9e1SMichael Kruse 
45*658eb9e1SMichael Kruse   mp_int_init(&seed);
46*658eb9e1SMichael Kruse   if ((res = mp_int_read_string(&seed, 10, argv[1])) != MP_OK) {
47*658eb9e1SMichael Kruse     fprintf(stderr, "%s: error reading `%s': %d\n", argv[0], argv[1], res);
48*658eb9e1SMichael Kruse     return 2;
49*658eb9e1SMichael Kruse   }
50*658eb9e1SMichael Kruse 
51*658eb9e1SMichael Kruse   if (mp_int_compare_value(&seed, 131) <= 0) {
52*658eb9e1SMichael Kruse     fprintf(stderr, "%s: please enter a start value > 131\n", argv[0]);
53*658eb9e1SMichael Kruse     return 1;
54*658eb9e1SMichael Kruse   }
55*658eb9e1SMichael Kruse 
56*658eb9e1SMichael Kruse   if ((res = mp_int_find_prime(&seed)) != MP_TRUE) {
57*658eb9e1SMichael Kruse     fprintf(stderr, "%s: error finding prime: %d\n", argv[0], res);
58*658eb9e1SMichael Kruse     return 2;
59*658eb9e1SMichael Kruse   }
60*658eb9e1SMichael Kruse 
61*658eb9e1SMichael Kruse   mp_int_to_string(&seed, 10, buf, sizeof(buf));
62*658eb9e1SMichael Kruse   printf("=> %s\n", buf);
63*658eb9e1SMichael Kruse 
64*658eb9e1SMichael Kruse   mp_int_clear(&seed);
65*658eb9e1SMichael Kruse 
66*658eb9e1SMichael Kruse   return 0;
67*658eb9e1SMichael Kruse }
68