黑马程序员技术交流社区
标题:
求解决!C#求素数。用for嵌套。
[打印本页]
作者:
王杨武
时间:
2012-9-17 22:56
标题:
求解决!C#求素数。用for嵌套。
#region 找出1000内所有的素数//让用户输入一个数,
for (int i = 1; i <= 100; i++)
{
for (int j = 1; j < i; j++)
{
if (i / j == 0)
{
Console.WriteLine(i);
}
}
}
Console.ReadKey();
#endregion
复制代码
上面代码未实现。求高手实现!
作者:
杨进
时间:
2012-9-18 00:16
不是高手,我试了下,这样应该可行。
//使用标记flag来记录是否是素数
bool flag;
for (int i = 1; i <= 1000; i++)
{
//每次循环开始初始化flag=true
flag = true;
if (i == 1 || i == 2 || i == 3)
{
Console.WriteLine("{0}是素数", i);
}
else
{
//也可以是for (int j = 2; j <= i/2; j++)
for (int j = 2; j < i; j++)
{
//只要有一次i被j整除,就把flag记录为false,不是素数
if (i % j == 0)
{
//Console.WriteLine("{0}不是素数", i);
flag = false;
//后面不用再除了,使用break退出循环
break;
}
}
//一个循环之后,flag还为true,那么i为素数
if (flag == true)
{
Console.WriteLine("{0}是素数", i);
}
}
}
Console.ReadKey();
复制代码
作者:
王杨武
时间:
2012-9-18 00:18
杨进 发表于 2012-9-18 00:16
不是高手,我试了下,这样应该可行。
啊。这么多啊。有木有代码短。又简单的明了的代码啊!
作者:
杨进
时间:
2012-9-18 00:21
本帖最后由 杨进 于 2012-9-18 08:03 编辑
{:soso_e114:}长吗。。注释啊什么的去掉。。
bool flag;
for (int i = 1; i <= 1000; i++)
{
flag = true;
if (i == 1 || i == 2 || i == 3) Console.WriteLine("{0}是素数", i);
else
{
for (int j = 2; j <= i/2; j++)
{
if (i % j == 0)
{
flag = false;
break;
}
}
if (flag == true) Console.WriteLine("{0}是素数", i);
}
}
Console.ReadKey();
复制代码
作者:
王杨武
时间:
2012-9-18 20:52
杨进 发表于 2012-9-18 00:21
长吗。。注释啊什么的去掉。。
谢谢!这个看起来比较好!
作者:
冯雅伦
时间:
2012-9-18 22:46
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();
}
作者:
蔡嘉
时间:
2012-10-17 09:34
本帖最后由 蔡嘉 于 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();
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2