Rocho.J

人脑是不可靠的, 随时记录感悟并且经常重复!

 

求解整数n之内的所有质素(素数)

自己做的小练习, 那种时间效率为(n*n)的方式, 就忽略了

 

什么是质素(素数)?
1. 只能被1和他本身整除的自然数(另外一种描述: 质素是不能被2到比他自身小1的任何正整数整除的自然数,1既不是质数也不是合数), 如 3,5,7;
2. 所有的质素都是奇数(偶数都可以被2整除), 2除外, 2是最小的质数
 3. 所有的非质素都可以分解为多个质素的乘积. 如: 非质素56:56 = 8*7 = 2*4*7 = 2*2*2*7

 求解整数n之内的所有质素(素数).
1. 构造外层循环得到1-n之间的数i, 为减小循环次数, 可以跳过所有的偶数
2. 构造内层循环得到2-m之间的数j, m=n的平方根取整(或者采用j*j<n做判断条件可以规避平方根不是整数的问题);
    {判断当i不等于j时, i是否能被j整除, 若能整除则不是素数则修改标记为并结束内层循环}
 3. 内循环结束后判断j是否大于m, 若是则i为素数并打印输出, 否则继续执行外层循环(或者内循环结束后判断标志位是否为true, 若是true则为素数, 否则继续循环).

代码
class PrimeNum
{
static void Main(string[] args)
{
Console.Write(
"请输入要求解的质数范围2-n: ");
int n = Convert.ToInt32(Console.ReadLine().Trim());//忽略验证

Console.Write(
"2 ");//输出最小的质数

bool isprime;//是否质数的标志
//最外层循环, 跳过偶数
for (int i = 3; i <= n; i += 2)
{

isprime
= true;//每次重置标志位
for (int j = 3; j * j <= n; j += 2)//内层循环, 判断i是否是质素, 跳过偶数
{
if (i % j == 0 && i != j)
{
isprime
= false;
break;
}
else
{
//nothing to do here!
}
}
if (isprime)
{
Console.Write(i.ToString()
+ " ");
}
}
}
}

 

 

 

posted on 2010-09-18 11:19  RJ  阅读(881)  评论(0编辑  收藏  举报

导航