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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

那个求是否是素数的代码给我看的彻底晕了,在VS上直接给我报了21个错误啊!!!!发现多了好多</P>,这是神马东东,百度了一下说是Html中的分段,不懂,就都给删掉了,然后也不行,按自己的想法删改了几个大括号,话说注释掉的那部分到底要不要啊,最后剩下一个错误实在不知道怎么回事了。为什么有一个if但是却有两个else啊。
所以最终没太明白算法。看起来好简单的样子,难道就是验证下n能否整除n平方根向上取整的那个数就行了?这肯定不对吧。

回复 使用道具 举报
宋清飞 发表于 2013-9-9 22:09
嗯,两个月后见!

两个月。。。日期看错了。。还以为10月开班呢,,工作辞了。。郁闷。。
回复 使用道具 举报
大虾挂了 发表于 2013-9-12 21:53
那个求是否是素数的代码给我看的彻底晕了,在VS上直接给我报了21个错误啊!!!!发现多了好多,这是神马东 ...

与<p>无关   那玩意儿是在发帖 编辑贴子的时候自动补上的  是HTML标记语言中的一个标记(段落)元素      素数:只能被1和其本身整除 (不能被其它数整除)的数  叫素数!


              但我比较疑惑的是 : 为什么判断的条件是整除以大于1到小于该数的开平方数呐     求解啊!
回复 使用道具 举报
§風過無痕§ 发表于 2013-9-13 09:27
与无关   那玩意儿是在发帖 编辑贴子的时候自动补上的  是HTML标记语言中的一个标记(段落)元素      素 ...

有没有可以正常运行的代码啊,那2个else是怎么回事啊,求一个可以运行的代码。
连for循环都没有,也就是说他只通过一次判断能否整除自己的平方根向上取整的数就能确认是否是素数?
回复 使用道具 举报
§風過無痕§ 发表于 2013-9-13 09:27
与无关   那玩意儿是在发帖 编辑贴子的时候自动补上的  是HTML标记语言中的一个标记(段落)元素      素 ...

才看懂你说的意思,你的意思是注释里的内容么?开始没注意这里,这个算法好给力。。。。。~~~~(>_<)~~~~ ,我想想怎么解释这个问题。
回复 使用道具 举报
这里只说下注释部分代码的原理吧。一个数如果不是素数,那么它肯定能拆分成几个因子相乘,假设合数k=a*b*c*d.........这些因子中,最小的那个因子,最大的时候可能是多少(这里听起来可能有点绕),我们就从2验证到这个数即可。反过来说,如果一个数是合数,那么他的最小因子不会超过多少呢?验证到这个数就行了。如果验证完发现不存在最小因子,那么直接说明了不存在因子,因为存在因子必然能找到最小的那个。
这个最小的数最大可能为多少呢?最坏的情况就是这个合数只能拆成2个质数,也就是m=a*b,这两个数里最小的那个最大不会超过多少呢?自然是a和b相等的时候,这个最小的因子获得了它可能取得的最大值(根号m)。如果a和b不相等,必然一个大于(根号m),一个小于(根号m),此时最小因子是小于(根号m)的。
综上,一个合数m可能的最小因子不会超过(根号m),所以如果从2验证到(根号m)(这里应该向下取整就行,不用向上取整),都没有找到一个因子,那么证明这个数根本就不存在最小因子,也就是不存在因子。

这个题也可以稍微优化一点,把奇数偶数分开讨论,偶数不必说。如果是奇数,只需要从3开始验证,然后每次+2验证。(2不是任何一个奇数的因子,所以说奇数更不会有其他偶数的因子)
回复 使用道具 举报
这样应该就好了
  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Text;



  5. namespace ConsoleApplication2
  6. {

  7.     class Program
  8.     {

  9.         static void Main(string[] args)
  10.         {
  11.             string flag = "";
  12.             do
  13.             {
  14.                 int j = 3;

  15.                 Console.WriteLine("请输入一个正整数,我们将判断是否为素数");

  16.                 int num = Convert.ToInt32(Console.ReadLine());
  17.                 if (num == 2)
  18.                     Console.WriteLine("2是素数");

  19.                 else if (num % 2 == 0)

  20.                     Console.WriteLine("{0}不是素数,可以被2整除", num);

  21.                 else
  22.                 {

  23.                     for (; j <= (int)Math.Sqrt(num); j += 2)
  24.                     {

  25.                         if (num % j == 0)

  26.                             break;

  27.                     }

  28.                     if (j >= ((int)Math.Sqrt(num)) + 1)  //这里选择+1很重要,+2是错误的

  29.                         Console.WriteLine("{0}是素数", num);

  30.                     else

  31.                         Console.WriteLine("{0}不是素数,可以被{1}整除", num, j); //人性化一点给出不是素数的证据

  32.                 }
  33.                 Console.WriteLine("输入y退出,其他继续");
  34.                 flag = Console.ReadLine();

  35.             } while (flag != "y" );

  36.             Console.ReadKey();


  37.         }

  38.     }

  39. }
复制代码
回复 使用道具 举报
求技术分!{:soso_e120:}
回复 使用道具 举报
haxyek 发表于 2013-9-12 22:03
两个月。。。日期看错了。。还以为10月开班呢,,工作辞了。。郁闷。。
...

o(╯□╰)o
回复 使用道具 举报
期待。期待。好好努力,准备中。
回复 使用道具 举报
今天刚刚来,冒个泡,希望技术分能上10
回复 使用道具 举报
黑马小子 发表于 2013-10-25 10:46
今天刚刚来,冒个泡,希望技术分能上10

亲 !到这里去签到吧!
官方签到帖:http://bbs.itheima.com/thread-91914-1-1.html
回复 使用道具 举报
十分感谢你的回复
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马