Kryptografia - algorytm z artykułu

0

Witam,
mam do wdrożenia algorytm z artykułu: http://paper.ijcsns.org/07_book/200705/20070530.pdf

  1. Moje pytanie brzmi jak wyznaczyć macierz Q n o wymiarach 3x3, 4x4, 5x5 i większe, rozumiem skąd są wartości w macierzy 2x2, ale nie mogę dojść w jaki sposób jest tworzona większa macierz.

  2. Kiedy obliczać T e? W kroku pokazującym obliczanie macierzy C(x) jest napisane, że jest tworzona na podstawie pkt. 25, ale nie widzę, żeby T e było tam obliczane.

0

a co to jest Q**^^**n?
a co to jest T e ?
wszystkie formuły są tam ponumerowane, czemu mam zgadywać o co Ci chodzi?
może zredaguj swój post żeby było wiadomo o co chodzi

0

2. Recurrence relations

Formuła(7)
dla Q 2x2
0 1
1 1

nie rozumiem, jak się tworzy macierz 3x3
Q 2 =
0 1 0
1 1 0
0 0 1

oraz macierz 4x4
Q 3 =
0 1 0 0
1 1 0 0
0 0 1 0
0 0 0 1

1

uwaga, indeksy liczone od jeden, nie jak w C od zera

PARI/GP>n=5; q= matrix(n,n);
for( i=2, n, q[i,i]=1);
q[2,1] = q[1,2] = 1;
q
[0 1 0 0 0]
[1 1 0 0 0]
[0 0 1 0 0]
[0 0 0 1 0]
[0 0 0 0 1]

PARI/GP> for(i=1,10,print(i, "\t", fibonacci(i), "\t", q^i))
1       1       [ 0,  1, 0,0,0; 1,1,0,0,0; ...
2       1       [ 1,  1, 0,0,0; ...
3       2       [ 1,  2, 0,0,0; ...
4       3       [ 2,  3, 0,0,0; ...
5       5       [ 3,  5, 0,0,0; ...
6       8       [ 5,  8, 0,0,0; ...
7       13      [ 8, 13, 0,0,0; ...
8       21      [13, 21, 0,0,0; ...
9       34      [21, 34, 0,0,0; ...
10      55      [34, 55, 0,0,0; ...
.        ^            ^
.        |____________|
0

nie za bardzo rozumiem Twoją pętlę, ale jeżeli dobrze rozumiem to kolejne macierze będą wyglądały

6x6
[0 1 0 0 0 0]
[1 1 0 0 0 0]
[0 0 1 0 0 0]
[0 0 0 1 0 0]
[0 0 0 0 1 0]
[0 0 0 0 0 1]

7x7
[0 1 0 0 0 0 0]
[1 1 0 0 0 0 0]
[0 0 1 0 0 0 0]
[0 0 0 1 0 0 0]
[0 0 0 0 1 0 0]
[0 0 0 0 0 1 0]
[0 0 0 0 0 0 1]

EDIT: w javie napisałem to tak:

int n = 5;
		int[][] matrix = new int[n][n];
		
		int[][] q = matrix;
		
		for(int i = 1; i < n; i++) {
			for(int j = 0; j < n; j++) {
				q[1][0] = q[0][1] = 1;
				q[i][j] = 0;
				q[i][i] = 1;
			}
		}
		
		for(int i = 0; i < n; i++) {
			for(int j = 0; j < n; j++) {
				System.out.print(q[i][j] + " ");
			}
			System.out.println();
		}
1

Po co zagnieżdżać pętle i po co wielokrotnie wykonywać instrukcję q[1][0] = q[0][1] = 1;?
Czyżby w Javie inty nie były domyślnie zerami i nie wystarczy ustawić jedynie wartości elementów równych 1?

0

masz rację okroiłem to:

public void buildSquareMatrixForQ() {
		matrixQ = new int[matrixSize][matrixSize];
		
		matrixQ[1][0] = matrixQ[0][1] = 1;
		for(int i = 1; i < matrixSize; i++)
			matrixQ[i][i] = 1;
		
		for(int i = 0; i < matrixSize; i++) {
			for(int j = 0; j < matrixSize; j++) {
				System.out.print(matrixQ[i][j] + " ");
			}
			System.out.println();
		}
	}

1 użytkowników online, w tym zalogowanych: 0, gości: 1