求高手帮忙写个算法

wozuiaijiahui 2012-07-04 02:24:16
输入一个数字(一定是大于0的正整数),要求算出乘机等于这个数的2个数,并且那2个数的差最小,比如:输入24,可以有多种组合,1和24,2和12,3和8,4和6,但是差最小的是4和6,就把4和6打印出来,但是如果输入的数为质数,比如:23,那就求出比23大的非质数的乘机,也就是24,所以打印的还是4和6,比23大的非质数很多,一定要最小的那个。各位高手帮帮忙看看吧。
...全文
131 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ParanoidKing 2012-07-04
  • 打赏
  • 举报
回复

bool IsPrime(int n)
{
int sqrt = (int)Math.Ceiling(Math.Sqrt(n));
for (int i = 2; i <= sqrt; i++)
{
if (n % i == 0)
return false;
}
return true;
}

int[] FindNumber(int n)
{
while (IsPrime(n))
n++;

int sqrt = (int)Math.Floor(Math.Sqrt(n));
while (n % sqrt != 0)
sqrt--;
return new int[] { sqrt, n / sqrt };
}

// test
FindNumber(24); // 4,6
FindNumber(23); // 4,6
xiaoyu821120 2012-07-04
  • 打赏
  • 举报
回复
其实你这题不难,只是涉及到的算法点比较多,算是一个比较综合的算法题。如果对性能没有太大要求的话,有很多种算法。建议你可以研究下提取因数,判断质数这些基础算法。
bdmh 2012-07-04
  • 打赏
  • 举报
回复

List<int> list = Enumerable.Range(1,24).ToList();
int cha = 0;
string s = "";
for (int i = 0; i < list.Count-1; i++)
{
for (int j = i + 1; j < list.Count; j++)
{
if (i * j == 24)
{
if (cha > Math.Abs(i - j))
{
s = i.ToString()+ "*"+ j.ToString();
}
else
cha = Math.Abs(i - j);
}
}
}
MessageBox.Show(s);

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧