zoukankan      html  css  js  c++  java
  • 求解整数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()
    + " ");
    }
    }
    }
    }
  • 相关阅读:
    hihocoder #1138 : Islands Travel
    关于c中的inline
    LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    LUOGU P1908 逆序对
    归并排序 (模板)
    tyvj 1864 守卫者的挑战
    loj #10001. 「一本通 1.1 例 2」种树
    bzoj 1026: [SCOI2009]windy数
    BZOJ 4521: [Cqoi2016]手机号码
    LUOGU 3089 后缀排序(模板)
  • 原文地址:https://www.cnblogs.com/cs_net/p/1830056.html
Copyright © 2011-2022 走看看