A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 百川 中级黑马   /  2014-3-17 23:16  /  3988 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 百川 于 2014-3-18 11:58 编辑

如题。c#怎样求一个较大整数的最小质数因子。我试了一下用两个for循环,但是写的很乱

4 个回复

倒序浏览
想了一会儿没想起来别的,只好写了个最简单的……
  1.         static int? getMinPrime(int num)
  2.         {
  3.             if (num < 2)
  4.                 return null;
  5.             for (int i = 2; i <= num; ++i)
  6.             {
  7.                 if (num % i == 0)
  8.                     return i;
  9.             }
  10.             return num;
  11.         }
复制代码
回复 使用道具 举报
本帖最后由 zhl406893081 于 2014-3-18 11:15 编辑

  1. <DIV class=blockcode>
  2. <BLOCKQUOTE>namespace ConsoleApplication1
  3. {

  4. class Program
  5. {
  6. static void Main(string[] args)
  7. {
  8. int number = Convert.ToInt32(Console.ReadLine());
  9. bool flag = true;
  10. if(number<2)
  11. Console.WriteLine("你输入的数字小于2");
  12. else if(质数(number))
  13. Console.WriteLine("你输入了一个质数,他的小质数因子是他本身");
  14. else if (number % 2 == 0)
  15. Console.WriteLine("你输入了一个偶数,他的最小质数因子为2");
  16. else
  17. {
  18. //质数中除了2没有其他偶数
  19. for (int i = 3; i < number; i+=2)
  20. {
  21. if (flag==质数(i)&&number%i==0)
  22. {
  23. Console.WriteLine("你输入的数字是{0},他的最小质数因子为{1}",number,i);
  24. break;
  25. }
  26. }
  27. }
  28. Console.ReadKey();
  29. }
  30. //判断n是否是质数
  31. static bool 质数(int n)
  32. {
  33. //是否是质数的标志
  34. bool flag = true;
  35. //对n开根号
  36. int s = (int)Math.Sqrt(n);
  37. //n除以每个比n开根号小比1大的自然数
  38. for (int i = 2; i <= s; i++)
  39. {
  40. //如果有能被整除的,则不是质数
  41. if (n % i == 0)
  42. {
  43. flag = false;
  44. return flag;
  45. }
  46. }
  47. return flag;
  48. }
  49. }
  50. }
复制代码


     

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1 很详细。。

查看全部评分

回复 使用道具 举报
本帖最后由 cancle 于 2014-3-18 10:04 编辑

额,由于卤煮说的是一个较大整数的质数因子,我就没考虑数字是小于2的,我也用2个for循环来做的。(实际上这道题用1个for循环就够了,用2个就有点画蛇添足了)
  1. <font style="background-color: rgb(255, 255, 255);">private static int GetMin(int val)
  2.         {
  3.             int num = 0;
  4.             for (int i = 2; i < val; i++)//1不是质数,所以从2开始
  5.             {
  6.                 if (i == 2)//2是最小质数
  7.                 {
  8.                     if (val % i == 0)
  9.                     {
  10.                         num = i;
  11.                         break;
  12.                     }
  13.                     continue;
  14.                 }
  15.                 else
  16.                 {
  17.                     for (int j = 2; j < i; j++)
  18.                     {
  19.                         if (i % j == 0)//除尽了,说明不是质数
  20.                         {
  21.                             break;//跳出j的for循环,继续遍历i
  22.                         }
  23.                         else//除不尽,质数
  24.                         {
  25.                             if (val % i == 0)
  26.                             {
  27.                                 num = i;
  28.                                 break;
  29.                             }
  30.                         }
  31.                     }
  32.                     break;
  33.                 }
  34.             }
  35.             return num;
  36.         }</font>
复制代码

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
谢谢大家,结贴
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马