求两个自然数,其和是667,最小公倍数与最大公约数之比是120:1
这是本人在笔试中遇到的难题,希望各位高手予以指教? --------------------编程问答--------------------static void Main(string[] args)
{
for(int i=1;i<335;i+=1)
{
if (Mini(i,667-i) == 120 * Maxi(i,667-i))
{
Console.WriteLine(i.ToString() + "," + (667 - i).ToString());
}
}
}
static int Mini(int small,int big)
{
for(int i=big;i<small*big;i+=1)
{
if(i%small == 0 && i%big==0)
{
return i;
}
}
return small * big;
}
static int Maxi(int small,int big)
{
for (int i = small; i > 1; i -= 1)
{
if (small % i == 0 && big % i == 0)
{
return i;
}
}
return 1;
}
--------------------编程问答-------------------- 1楼的应该可以 --------------------编程问答-------------------- 115 552
232 435
#include <iostream>
using namespace std;
//最大公约数
int GCD(int m,int n) {
int r;
while(n != 0) {
r = m % n;
m = n;
n = r;
}
return m;
}
int main()
{
int i = 667;
for (i = 1; 2*i < 667; i++)
{
int m = GCD(i,667-i);
//最大公约数*最小公倍数=两数乘积
if (120*m*m==i*(667-i))
{
cout<<m<<endl;
cout<<i<<"\t"<<667-i<<endl;
}
}
return 0;
}
--------------------编程问答--------------------
staticvoid Main(string[] args)
{for(int i=1;i<335;i+=1)
{if (Mini(i,667-i)==120* Maxi(i,667-i))
{
Console.WriteLine(i.ToString()+","+ (667- i).ToString());
}
}
}staticint Mini(int small,int big)
{for(int i=big;i<small*big;i+=1)
{if(i%small==0&& i%big==0)
{return i;
}
}return small* big;
}staticint Maxi(int small,int big)
{for (int i= small; i>1; i-=1)
{if (small% i==0&& big% i==0)
{return i;
}
}return1;
}
这好像有点问题吧?为什么是小于337 和return1? --------------------编程问答--------------------
你不觉得过了335之后的组合和前面的是重复的吗?还有,最大公约数在最小的情况下不是1 么。。。 --------------------编程问答--------------------
--------------------编程问答--------------------
int m;//2者中小数 n=667-m
List<int> x = new List<int>();
for (int i = 1; i < 334; i++)
{
int temp = 120 * (667 - i);
if (temp % i != 0)
{
continue;
}
else
{
int div = temp / i;
int b = (int)System.Math.Sqrt(div);
if(b*b==div)
x.Add(i);
}
}
for (int i = 0; i < x.Count; i++)
{
m = x[i];
MessageBox.Show(m.ToString());
}
private static void suanfa1()
{
int X = 0;
int Y = 0;
for (;X<667;X++)
for (Y = 0; Y < 667; Y++)
{
if (X + Y != 667)
continue ;
if (min(X, Y) / max(X, Y) != 120)
continue ;
Console.WriteLine(string.Format("x={0};y={1};min={2};max={3}", X, Y, min(X, Y), max(X, Y)));
}
}
/// <summary>
/// 最小公倍数
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private static int min(int x, int y)
{
for (int i = (x < y ? x : y); i<10000 ; i++)
{
if (i % y == 0&&i%x==0)
return i;
}
return 0;
}
/// <summary>
/// 最大公约数
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
private static int max(int x, int y)
{
for (int i =x>y?x:y; i > 0; i--)
{
if (x % i == 0 && y % i == 0)
return i;
}
return 0;
}
补充:.NET技术 , C#