最大公约数:
- 辗转相除法: 两个正整数a,b(a>b), 它们的最大公约数 = a除以b的余数c和较小数b之间的最大公约数。
- 更相减损术: 两个正整数a,b(a>b), 它们的最大公约数 = a-b的差值c和较小数b之间的最大公约数。
int GCD(int a, int b) //辗转相除法
{
int min = a;
int max = b;
if ( a >= b ){
min = b;
max = a;
}
if (min == 0){
return max;
}
int p = max % min;
return GCD(min,p);
}
int GCD(int a, int b) //更相减损术
{
int min = a;
int max = b;
if ( a >= b ){
min = b;
max = a;
}
if (min == 0){
return max;
}
int p = max - min;
return GCD(min,p);
}
int GCD(int a, int b) //更相减损术
{
if(a == b){
return a;
}
if ((a&1)==0 && (b&1)==0){
return GCD(a>>1,b>>1)<<1;
}
if((a&1)==0 && (b&1)!=0){
return GCD(a>>1,b);
}
if((a&1)!=0 && (b&1)==0){
return GCD(a,b>>1);
}
if((a&1)!=0 && (b&1)!=0){
int min = a > b ? b : a;
int max = a > b ? a : b;
return GCD(min,max-min);
}
return 0;
}
字符串转二进制
string StringToBinary(string str)
{
byte[] data = Encoding.Unicode.GetBytes(str);
StringBuilder sb = new StringBuilder(data.Length*8);
foreach (byte item in data)
{
sb.Append(Convert.ToString(item,2).PadLeft(8,'0'));
}
return sb.ToString();
}
二进制转字符串
string BinaryToString(string str)
{
System.Text.RegularExpressions.CaptureCollection cs = System.Text.RegularExpressions.Regex.Match(str,@"([01]{8})+").Groups[1].Captures;
byte[] data = new byte[cs.Count];
for (int i = 0; i < cs.Count; i++)
{
data[i] = Convert.ToByte(cs[i].Value,2);
}
return Encoding.Unicode.GetString(data,0,data.Length);
}