Дано: S=K1+K2+K3+K4+K5+K6+K7+K8 S\16 = A (целая часть) B (остаток) С = K10 xor K9 xor K8 xor K7 xor K6 xor K5 xor K4 xor K3 xor K2 xor K1 S*C\16 = G (целая часть) M (остаток) A-K9 = 0 B-K10 = 0 C-K11 = 0 M-K12 = 0 Найти: K1...K12
G всплывет позже забыл сказать - K1...K12 могут принять только вот эти значения: 3,13,1,7,10,9,0,14,6,4
Так я и не понял, зачем G :-( Код (Text): #include <stdio.h> int main() { int k[] = {3,13,1,7,10,9,0,14,6,4}; const values = sizeof(k)/sizeof(k[0]); int i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12; for( i1 = 0; i1 < values; i1++ ) for( i2 = 0; i2 < values; i2++ ) for( i3 = 0; i3 < values; i3++ ) for( i4 = 0; i4 < values; i4++ ) for( i5 = 0; i5 < values; i5++ ) for( i6 = 0; i6 < values; i6++ ) for( i7 = 0; i7 < values; i7++ ) for( i8 = 0; i8 < values; i8++ ) for( i9 = 0; i9 < values; i9++ ) for( i10 = 0; i10 < values; i10++ ) for( i11 = 0; i11 < values; i11++ ) for( i12 = 0; i12 < values; i12++ ) { int s = k[i1] + k[i2] + k[i3] + k[i4] + k[i5] + k[i6] + k[i7] + k[i8]; int a = s / 16; int b = s % 16; int c = k[i10] ^ k[i9] ^ k[i1] ^ k[i2] ^ k[i3] ^ k[i4] ^ k[i5] ^ k[i6] ^ k[i7] ^ k[i8]; int m = s * c % 16; if( a == k[i9] && b == k[i10] && c == k[i11] && m == k[i12] ) printf("k1=%u, k2=%u, k3=%u, k4=%u, k5=%u, k6=%u, " "k7=%u, k8=%u, k9=%u, k10=%u, k11=%u, k12=%u\n", k[i1], k[i2], k[i3], k[i4], k[i5], k[i6], k[i7], k[i8], k[i9], k[i10], k[i11], k[i12] ); } return 0; }
S\16 = A (целая часть) B (остаток) A-K9 = 0 B-K10 = 0 Создается впечатление, что ты людей только запутать хочешь. Быть может, проще было бы записать так? Код (Text): S = 16*A + B => S = 16*K9 + K10 далее: Код (Text): 16*K9 + K10 = S = K1 + K2 + ... + K8 далее: Код (Text): K11 = K10^K9^...^K1 K11 = (16G + K12)/S Хотя, система все равно не решается. Больше неизвестных, чем уравнений Поэтому брютфорс, как S.T.A.S. и предложил.
Только брютфорсил бы я по другому условию. А именно, не столько циклов, сколько S.T.A.S. предложил, а на условие: Код (Text): 16*K9 + K10 = S = K1 + K2 + ... + K8
Да, количество циклов следовало бы уменьшить - у меня большая часть времени ушла на переименовывание переменных в 11 for после copy-paste =)