關於數論的一些知識點,慢慢積攢

數論的東西太多了,決定把一些遇到的定理在這裏整理一下

L(x) 求的是 LCM(1,2,3.....x)
LCM  求最小公倍數
L(1) = 1

L(x+1) = { L(x) * p    if x+1 is a perfect power of prime p
         { L(x)        otherwise
PI的定義方式
const double PI = acos(-1); 
歐拉函數(求1~n與n互質的數的個數)
Φ(n) = n*(1 - 1/p1)*(1 - 1/p2)....(1 - 1/pn) pn is prime
關於 ax + by = 1 的必要條件是 gcd(a,b) = 1的簡單證明
假設a,b的最大公約數爲m,如果方程ax+by=1有解,那麼方程(a/m)x+(b/m)y=1/m.有整數解。
顯然不成立(a/m, b/m 是整數,整數加整數不等於小於1的數),所以假設不成立
關於取整的兩個函數
#include <math.h> double floor(double x); 
float floorf(float x); 
long double floorl(long double x);

double floor(double x);

double ceil(double x);

使用floor函數。floor(x)返回的是小於或等於x的最大整數。
如:     floor(10.5) == 10    floor(-10.5) == -11


使用ceil函數。ceil(x)返回的是大於x的最小整數。
如:     ceil(10.5) == 11    ceil(-10.5) ==-10

    
floor()是向負無窮大舍入,floor(-10.5) == -11;
ceil()是向正無窮大舍入,ceil(-10.5) == -10



不得不說點:/ % 四捨五入 向上取整(ceil()) 向下取整(floor)
 1. /

    //Test "/"
    cout << "Test \"/\"!" << endl;
    cout << "7   / 2   = " << 7/2 << endl;      ///3
    cout << "7   / 2.0 = " << 7/2.0 << endl;    ///3.5
    cout << "7.0 / 2   = " << 7.0/2 << endl;    ///3.5
    cout << "7.0 / 2.0 = " << 7.0/2.0 << endl; ///3.5
    cout << "7   / 3   = " << 7/3 << endl;      ///2
    cout << endl;

2. %
    ///Test "%"
    cout << "Test \"%\"!" << endl;
    cout << "9   % 3   = " << 9%3 << endl;      ///0
    cout << "9   % 4   = " << 9%4 << endl;      ///1
    ///cout << "9.0 % 3   = " << 9.0%3 << endl;
    ///cout << "9   % 3.0 = " << 9%3.0 << endl;
    cout << endl;

3. 四捨五入
    ///Test round()
    cout << "Test \"四捨五入\"!" << endl;
    double dRoundA = 1.4;
    double dRoundB = 1.6;
    double dRoundLowA = -1.4;
    double dRoundLowB = -1.6;
    double dRoundLowC = 0.0;
    cout << dRoundA << " = " << RoundEx(dRoundA) << endl;         ///1
    cout << dRoundB << " = " << RoundEx(dRoundB) << endl;         ///2
    cout << dRoundLowA << " = " << RoundEx(dRoundLowA) << endl;   ///-1
    cout << dRoundLowB << " = " << RoundEx(dRoundLowB) << endl;   ///-2
    cout << dRoundLowC << " = " << RoundEx(dRoundLowC) << endl;   ///0
    cout << endl;

double RoundEx(const double& dInput)
{
    double dIn = dInput;
    if (dInput >= 0.0)    ///???
    {
        return int(dIn + 0.5);
    } 
    else
    {
        return int(dIn - 0.5);
    }
}

4. ceil() 向上取整
    ///Test ceil() 向上取整
    cout << "Test ceil() 向上取整!" << endl; 
    cout << "ceil 1.2 = " << ceil(1.2) << endl;      ///2
    cout << "ceil 1.8 = " << ceil(1.8) << endl;      ///2
    cout << "ceil -1.2 = " << ceil(-1.2) << endl;    ///-1
    cout << "ceil -1.8 = " << ceil(-1.8) << endl;    ///-1
    cout << "ceil 0.0 = " << ceil(0.0) << endl;      ///0
    cout << endl;

5. floor() 向下取整
    ///Test floor() 向下取整
    cout << "Test floor() 向下取整!" << endl;
    cout << "floor 1.2 = " << floor(1.2) << endl;    ///1
    cout << "floor 1.8 = " << floor(1.8) << endl;    ///1
    cout << "floor -1.2 = " << floor(-1.2) << endl; ///-2
    cout << "floor -1.8 = " << floor(-1.8) << endl; ///-2
    cout << "floor 0.0 = " << floor(0.0) << endl;    ///0
    cout << endl;
拓撲排序
如果in[](入度數組)中存在兩個以上的in[x] == 0,該拓撲排序的順序無法判斷
如果in[]判定完畢後,還存在in[x] != 0,該拓撲排序中存在衝突,即存在環



發佈了69 篇原創文章 · 獲贊 58 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章