В двоичной системе счисления алфавит состоит из 0 и 1. Разложим приведённое число на сумму степеней двойки (одна степень будет встречаться 0 или 1 раз), а затем воспользуемся формулой перевода из двоичной системы счисления в систему кратную двум. Таблицу триад и тетрад смотри в приложении.
Int gcd(int a, int b){ return b ? gcd(b, a%b) : a; } Это красивая реализация в виде тернарной строчки. Рекурсивная функция.
int gcd(int a, int b){ if (b) return gcd(b, a%b); else return a; } Это тоже рекурсивная функция, просто не с тернарной строчкой, а с ифом.
int gcd(int a, int b){ while (b){ swap(a,b); b%=a; } return a; } Это реализация циклом. Нерекурсивная функция.
Вот, среди них можешь выбрать любую функцию, которая тебе больше нравится. Теперь программа. #include<iostream> using namespace std; int gcd(int a, int b){ //скопипастишь любую понравившуюся } int main(){ int a,b,c,d; cin>>a>>b>>c>>d; cout<<gcd(gcd (a,b), gcd(b,c)); return 0; }
а) 279₁₀ = 100010111₂ = 427₈ = 117₁₆
б) 781₁₀ = 1100001101₂ = 1415₈ = 349₁₆
в) 841₁₀ = 1101001001₂ = 1511₈ = 349₁₆
г) 508₁₀ = 111111100₂ = 774₈ = 1FC₁₆
Объяснение:
В двоичной системе счисления алфавит состоит из 0 и 1. Разложим приведённое число на сумму степеней двойки (одна степень будет встречаться 0 или 1 раз), а затем воспользуемся формулой перевода из двоичной системы счисления в систему кратную двум. Таблицу триад и тетрад смотри в приложении.
а)279₁₀ = 256+16+4+2+1 = 1·2⁸+0·2⁷+0·2⁶+0·2⁵+1·2⁴+0·2³+1·2²+1·2¹+1·2⁰ = 100010111₂
100|010|111 - разбили на триады для перевода в 8-ю сис. счисления
4 2 7 --> 100010111₂ = 427₈
0001|0001|0111 - разбили на тетрады для перевода в 16-ю сис. счисления (добавили вначале нули, чтобы кол-во цифр было кратно 4).
1 1 7 --> 100010111₂ = 117₁₆
б)781₁₀ = 512+256+8+4+1 = 1·2⁹+1·2⁸+0·2⁷+0·2⁶+0·2⁵+0·2⁴+1·2³+1·2²+0·2¹+1·2⁰ = 1100001101₂
001|100|001|101 - разбили на триады
1 4 1 5 --> 1100001101₂ = 1415₈
0011|0000|1101 - разбили на тетрады
3 0 D --> 1100001101₂ = 30D₁₆
в)841₁₀ = 512+256+64+8+1 = 1·2⁹+1·2⁸+0·2⁷+1·2⁶+0·2⁵+0·2⁴+1·2³+0·2²+0·2¹+1·2⁰ = 1101001001₂
001|101|001|001 - разбили на триады
1 5 1 1 --> 1101001001₂ = 1511₈
0011|0100|1001 - разбили на тетрады
3 4 9 --> 1101001001₂ = 349₁₆
г)508₁₀ = 256+128+64+32+16+8+4 = 1·2⁸+1·2⁷+1·2⁶+1·2⁵+1·2⁴+1·2³+1·2²+0·2¹+0·2⁰ = 111111100₂
111|111|100 - разбили на триады
7 7 4 --> 111111100₂ = 774₈
0001|1111|1100 - разбили на тетрады
1 F C --> 111111100₂ = 1FC₁₆
return b ? gcd(b, a%b) : a;
}
Это красивая реализация в виде тернарной строчки. Рекурсивная функция.
int gcd(int a, int b){
if (b)
return gcd(b, a%b);
else
return a;
}
Это тоже рекурсивная функция, просто не с тернарной строчкой, а с ифом.
int gcd(int a, int b){
while (b){
swap(a,b);
b%=a;
}
return a;
}
Это реализация циклом. Нерекурсивная функция.
Вот, среди них можешь выбрать любую функцию, которая тебе больше нравится. Теперь программа.
#include<iostream>
using namespace std;
int gcd(int a, int b){
//скопипастишь любую понравившуюся
}
int main(){
int a,b,c,d;
cin>>a>>b>>c>>d;
cout<<gcd(gcd (a,b), gcd(b,c));
return 0;
}
Удачи❤