t_0025.gif碰墙的心都有了。

判断一个数是否为素数:

一个数只能被1和它本身整除就是素数。

判断过程:

  1. 整数N是2则就是素数;

  2. 整数N不是2,则从2开始到N-1去除N;

  3. 如果2过程中有一次余数为0,则N不是素数;如果2过程中没有一次余数为0,则N是素数。

    使用C#编程语言实现:

public Boolean IsPrime(int number)
        {
            if(n==2)
            {
                return ture;
            }
            for(int i=2; i<n; i++)
            {
                if(n%i==0)
                {
                    return false;
                }
            }
            return true;
        }

思考:

   判断2至N的一半的数是否能整除N,可以减少判断次数。

public Boolean IsPrime(int number)
        {
            if(n==2)
            {
                return ture;
            }
            for(int i=2; i<n/2+1; i++)
            {
                if(n%i==0)
                {
                    return false;
                }
            }
            return true;
        }

   对于素数而言,它的个数是有限的,因此可以使用枚举的方式来判断一个数是否是素数。

   

/*
 * Created by SharpDevelop.
 * User: Ajax
 * Date: 2013/7/21 星期日
 * Time: 21:25
 *
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
namespace Demo
{
    class Prime
    {
        public static Boolean IsPrime(int number)
        {
            // 素数表
            int []  primeArrayTable= new int[]{
                2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,
                59,61,67,71,73,79,83,89,97,113,
                193,241,257,337,353,401,433,449,577,593,641, 
                673,769,881,929,977,1009,1153,1201,1217,1249, 
                1297,1361,1409,1489,1553,1601,1697,1777,1873, 
                1889,2017,2081,2113,2129,2161,2273,2417,2593, 
                2609,2657,2689,2753,2801,2833,2897,3041,3089, 
                3121,3137,3169,3217,3313,3329,3361,3457,3617, 
                3697,3761,3793,3889,4001,4049,4129,4177,4241, 
                4273,4289,4337,4481,4513,4561,4657,4673,4721, 
                4801,4817,4993,5009,5153,5233,5281,5297,5393, 
                5441,5521,5569,5857,5953,6113,6257,6337,6353, 
                6449,6481,6529,6577,6673,6689,6737,6833,6961, 
                6977,7057,7121,7297,7393,7457,7489,7537,7649, 
                7681,7793,7841,7873,7937,8017,8081,8161,8209, 
                8273,8353,8369,8513,8609,8641,8689,8737,8753, 
                8849,8929,9041,9137,9281,9377,9473,9521,9601, 
                9649,9697,9857  
            }; 
            int count=primeArrayTable.Length;
            if(number==2)
            {
                return true;
            }
            for(int i=0; i<count; i++)
            {
                if(number/2+1 < primeArrayTable[i])
                {
                    return true;
                }
                if(number%primeArrayTable[i]==0)
                {
                    return false;
                }
            }
            return true;
        }
        public static void Main(string[] args)
        {
            for(int i=2; i<300; i++)
            {
                bool flag=Prime.IsPrime(i);
                if(flag==true)
                {
                    Console.WriteLine("{0}是质数",i);
                 }else{
                     Console.WriteLine("{0}不是质数",i);
                }
            }
            while(true)
            {
                ;
            }
                                       
        }
    }
}

注释:Main方法最后的while死循环是为了在Cosole中看到打印输出的信息信息。

如下图:

230537178.png

   t_0001.gif小小算法,还折腾了一会,看来还是要先思考,在提问,在实现。