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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王杨武 中级黑马   /  2012-9-17 22:56  /  2263 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. #region 找出1000内所有的素数//让用户输入一个数,



  2.             for (int i = 1; i <= 100; i++)
  3.             {
  4.                 for (int j = 1; j < i; j++)
  5.                 {
  6.                     if (i / j == 0)
  7.                     {
  8.                         Console.WriteLine(i);
  9.                     }
  10.                 }
  11.             }
  12.             Console.ReadKey();
  13.             #endregion
复制代码
上面代码未实现。求高手实现!

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

6 个回复

倒序浏览
不是高手,我试了下,这样应该可行。
  1. //使用标记flag来记录是否是素数
  2.             bool flag;
  3.             for (int i = 1; i <= 1000; i++)
  4.             {
  5.                 //每次循环开始初始化flag=true
  6.                 flag = true;
  7.                
  8.                 if (i == 1 || i == 2 || i == 3)
  9.                 {
  10.                     Console.WriteLine("{0}是素数", i);
  11.                 }
  12.                 else
  13.                 {
  14.                     //也可以是for (int j = 2; j <= i/2; j++)
  15.                     for (int j = 2; j < i; j++)
  16.                     {
  17.                         //只要有一次i被j整除,就把flag记录为false,不是素数
  18.                         if (i % j == 0)
  19.                         {
  20.                             //Console.WriteLine("{0}不是素数", i);
  21.                             flag = false;
  22.                             //后面不用再除了,使用break退出循环
  23.                             break;
  24.                         }
  25.                     }
  26.                     //一个循环之后,flag还为true,那么i为素数
  27.                     if (flag == true)
  28.                     {
  29.                         Console.WriteLine("{0}是素数", i);
  30.                     }
  31.                 }
  32.             }
  33.             Console.ReadKey();
复制代码

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
杨进 发表于 2012-9-18 00:16
不是高手,我试了下,这样应该可行。

啊。这么多啊。有木有代码短。又简单的明了的代码啊!
回复 使用道具 举报
本帖最后由 杨进 于 2012-9-18 08:03 编辑

{:soso_e114:}长吗。。注释啊什么的去掉。。
  1. bool flag;
  2.             for (int i = 1; i <= 1000; i++)
  3.             {
  4.                 flag = true;
  5.                 if (i == 1 || i == 2 || i == 3) Console.WriteLine("{0}是素数", i);
  6.                 else
  7.                 {
  8.                     for (int j = 2; j <= i/2; j++)
  9.                     {
  10.                         if (i % j == 0)
  11.                         {
  12.                             flag = false;
  13.                             break;
  14.                         }
  15.                     }
  16.                     if (flag == true) Console.WriteLine("{0}是素数", i);
  17.                 }
  18.             }
  19.             Console.ReadKey();
复制代码
回复 使用道具 举报
杨进 发表于 2012-9-18 00:21
长吗。。注释啊什么的去掉。。

谢谢!这个看起来比较好!
回复 使用道具 举报
static void Main(string[] args)
        {
            for (int i = 1; i <= 100; i++)
            {
                for (int j = 2; j <= i; j++)
                {
                    if (i % j == 0)
                    {
                        if (i != j)
                        {
                            break;
                        }
                        else
                        {
                            Console.WriteLine(i);
                            break;
                        }
                    }
                }
            }
            Console.ReadKey();
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
蔡嘉 中级黑马 2012-10-17 09:34:57
7#
本帖最后由 蔡嘉 于 2012-10-17 09:42 编辑

学习了,而且第一种应该比楼上的同学的算法更高效,因为  j <= i / 2的缘故吧。
static void Main(string[] args)
        {
            //bool flag;事实上flag的作用域在下面就应该够用了,因为 i  每循环一次,flag就起一次作用。
            for (int i = 1; i <= 100; i++)
            {
                bool flag = true;
                for (int j = 2; j <= i / 2; j++)
                {                    
                    if (i % j == 0)
                    {
                        flag = false;
                        break;
                    }                                                                              
                }
                if (flag == true)
                {
                    Console.WriteLine(i);
                }                              
            }
            Console.ReadKey();
        }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马