zoukankan      html  css  js  c++  java
  • 求素质的算法

    根据素数的性质:只能被1和它本身整除,不过如果直接编写循环与自身除,时间复杂度很高,不好。

    利用其它的一些性质可以修改算法,比如偶数肯定不是素数(除了2)。

    定理: 如果n不是素数, 则n有满足1<d<=sqrt(n)的一个"素数"因子d。

    所以有如下程序:

    bool isPrime(long n)
    {
        if (n <= 1)
            return false;
        if (n == 2 || n == 3)
            return true;
        for (int i = 3; i*i <= n; i+=2)//sqrt(n)效率较低
        {
            if (n%i == 0)
                return false;
        }
        return true;
    }

    对于每个n,只判断3,5,7……等基数因数,并且只判断到<=sqrt(n)。

    时间复杂度变为O(sqrt(n))。

    再补个斐波那契数列的程序,很简单:

    void Fibonacci()
    {
        long i1 = 0;
        long i2 = 1;
        long i3;
        cout << i1 << endl;
        cout << i2 << endl;
        while (true)
        {
            i3 = i1 + i2;
            i1 = i2;
            i2 = i3;
            cout << i3 << endl;
            if (i3 >= INT_MAX/2)
            {
                break;
            }
        }
    }

    其实根据计算机的long long最大就64位。所以直接查表是时间复杂度最低的方法。

    static const int Fibonacci[] = 
    {
        0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,
        2584,4181,6765,10946,17711,28657,46368,75025,121393,196418,
        317811,514229,832040,1346269,2178309,3524578,5702887,9227465,
        14930352,24157817,39088169,63245986,102334155,165580141,267914296,
        433494437,701408733,1134903170,1836311903,-1323752223
    };
  • 相关阅读:
    css display和vertical-align 属性
    Python:time模块/random模块/os模块/sys模块
    css display和vertical-align 属性
    初始面向对象
    模块小记
    迭代器与生成器
    默认参数的陷阱自我心得
    初始函数
    文件操作
    python基础知识补充
  • 原文地址:https://www.cnblogs.com/wyc199288/p/5206589.html
Copyright © 2011-2022 走看看