-
Notifications
You must be signed in to change notification settings - Fork 6
/
scalarmul.c
77 lines (63 loc) · 1.42 KB
/
scalarmul.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
#include"typedef.h"
#include"tools.h"
#include"matrix.h"
#include"getput.h"
#include"longtools.h"
int main (int argc, char *argv[])
{
matrix_TYP **M;
int Manz,
i,
j,
k,
n, /* the numerator */
d, /* the denominator */
ggt;
char comment[1000];
read_header(argc, argv);
if((FILEANZ < 1) || (is_option('h'))){
printf("Scalarmul file -n=numerator -d=denominator\n");
printf("\n");
printf("Multiplies all matrices in file with numerator/denominator.\n");
printf("If either of these is omitted, it is set to 1.\n");
printf("\n");
printf("\n");
if (is_option('h')){
exit(0);
}
else{
exit(31);
}
}
M = mget_mat(FILENAMES[0], &Manz);
n = 1;
if (is_option('n')){
n = optionnumber('n');
}
d = 1;
if (is_option('d')){
d = optionnumber('d');
}
ggt = GGT(n,d);
d = d/ggt;
n = n/ggt;
printf("#%d\n",Manz);
for (i=0;i<Manz;i++){
Check_mat(M[i]);
rat2kgv(M[i]);
if (n != 1){
for (j=0;j<M[i]->rows;j++){
for (k=0;k<M[i]->rows;k++){
M[i]->array.SZ[j][k] = M[i]->array.SZ[j][k] * n;
}
}
}
M[i]->kgv = M[i]->kgv * d;
Check_mat(M[i]);
sprintf(comment,"%d-th matrix of %s multiplied by %d/%d",
i+1,FILENAMES[0],n,d);
put_mat(M[i],NULL,comment,2);
printf("\n");
}
exit(0);
}