发个题目大家娱乐一下
有N个Int32范围内的正整数,找出N个数两两之间最大公约数的最大值。例如:N = 4,4个数为:9 15 25 16,两两之间最大公约数的最大值是15同25的最大公约数5。N可能会达到5w规模。问题不涉及什么高深的知识,所以比较适合讨论。
------解决方案--------------------
int max = int.MinValue;
for(i = 0; i < data[i]; i++) {
for(j = 0; j < data[j]; j++) {
int p, q;
if(data[i] <= data[j]) {
p = data[i]; q = data[j];
} else {
p = data[j]; q = data[i];
}
int value = 辗转相除法(p, q);
if(max < value) {
max = value;
}
}
}
辗转相除法:
int suv_div(int p, int q) {
r = q % p;
if(r == 0) {
return p;
}
suv_div(r, p);
}
纯属抛砖引玉
------解决方案--------------------低效的一个算法
static void Main(string[] args)
{
const int count = 500; //整数个数
int[] arry = new int[count];
Random rnd = new Random();
for (int i = 0; i < count; i++)
arry[i] = rnd.Next(Int32.MaxValue-1)+1;
DateTime t1 = DateTime.Now;
int x=0, y=0, z=0;
for (int i = 0; i < count; i++)
{
for (int j = i + 1; j < count; j++)
{
int m = MaxY(arry[i], arry[j]);
if (x < m)
{