-
Notifications
You must be signed in to change notification settings - Fork 0
/
mul.c
141 lines (126 loc) · 3.33 KB
/
mul.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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include<stdio.h>
#include<gmp.h>
#include <assert.h>
#include <limits.h>
#include<stdlib.h>
void addit(mpz_t,mpz_t ,mpz_t );
int main()
{
char inputStr[1025];
/*
mpz_t is the type defined for GMP integers.
It is a pointer to the internals of the GMP integer data structure
*/
mpz_t n;
mpz_t m;
mpz_t p;
int flag;
printf ("Enter your number: ");
scanf("%1024s" , inputStr); /* NOTE: never ever write a "raw" call to
scanf ("%s", inputStr);
You are potentially leaving a
security hole in your code.
Also, inputStr is set to 1025 bytes to allow
scanf to write '\0' at the end. :-)
Thanks to Peter Schmidt-Nielsen for the fix.
*/
/* 1. Initialize the number */
mpz_init(n);
mpz_set_si(n,0);
mpz_init(m);
mpz_set_si(m,3);
/* 2. Parse the input string as a base 10 number */
flag = mpz_set_str(n,inputStr, 10);
assert (flag == 0); /* If flag is not 0 then the operation failed */
/* Print n */
printf ("n = ");
mpz_out_str(stdout,10,n); // to base 10
printf ("\n");
/* 5. Square n */
mpz_mul(n,n,n); /* n = n * n */
printf (" (n )^2 = ");
mpz_out_str(stdout,10,n);
printf ("\n");
mpz_powm (m,n,n,m);
printf ("(n^n)mod(m) = ");
mpz_out_str(stdout,10,m); // to base 10
printf ("\n");
mpz_gcd (m,n,m);
printf ("gcd = ");
mpz_out_str(stdout,10,m); // to base 10
printf ("\n");
mpz_t one;
mpz_init(one);
mpz_set_ui(one,1);
mpz_sub (m,m,one);
printf ("difference = ");
mpz_out_str(stdout,10,m); // to base 10
printf ("\n");
//Determine whether n is prime. Return 2 if n is definitely prime, return 1 if n is probably prime (without being certain), or return 0 if n is definitely composite.
int q;
printf("Enter no. to be checked if prime");
scanf("%d",&q);
mpz_init(p);
mpz_set_ui(p,q);
int ch =9;
ch = mpz_probab_prime_p (p, 25);
printf("prime : %d",ch);
printf ("m = ");
mpz_out_str(stdout,10,m); // to base 10
printf ("\n");
printf ("n = ");
mpz_out_str(stdout,10,n); // to base 10
printf ("\n");
addit(m,m,n);
printf ("sum = ");
mpz_out_str(stdout,10,m); // to base 10
printf ("\n");
printf("float");
mpf_t x,y;
mpf_init (x);
mpf_set_si (x, 3.1325151);
gmp_printf("%.100Fx\n",x);
mpf_init (y);
mpf_set_si (y, 0);
printf ("x = ");
mpf_out_str(stdout,10,0,x); // to base 10
printf ("\n");
mpf_floor (y, x);
printf ("y = ");
mpf_out_str(stdout,10,0,y); // to base 10
printf ("\n");
gmp_printf("%.100Fx\n",x);
printf("%d",mpf_cmp(x,y));
mpz_t two;
mpz_init(two);
mpz_set_ui(two,2);
mpz_t pow;
mpz_init(pow);
mpz_set_ui(pow,1);
mpz_pow_ui (pow, two,339);
printf ("pow = ");
mpz_out_str(stdout,10,pow); // to base 10
printf ("\n");
mpz_t nxt_prime;
mpz_init(nxt_prime);
mpz_set_ui(nxt_prime,1);
mpz_nextprime (nxt_prime, pow);
printf ("next prime = ");
mpz_out_str(stdout,10,nxt_prime); // to base 10
printf ("\n");
int r;
r = rand();
printf("r = %d",r);
srand(time(NULL));
int s = (rand()%100) + 300;;
printf("s = %d",s);
r = (rand()%100) + 369;
printf("r = %d",r);
/* 6. Clean up the mpz_t handles or else we will leak memory */
mpz_clear(n);
return 0;
}
void addit(mpz_t s,mpz_t m,mpz_t n)
{
mpz_add (s,m,n);
}