判断正整数p是否是素数

方法一 朴素的判定    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAADUAAAAUBAMAAADfOGjQAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHZmmasi3Ym7RO8yVM0Ml5alAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABPUlEQVQoFV2RPUvDUBSGn9Q01iapQVycLBbBRawUN7G6OxQXHRyyiDjZxVHILBTq4lwQJxWK/QMO7opObvEfVIROBX2T3qbqITfvV+45SS78L6/+ndQfe86omSAl5fRuLdV2RBqpgKcRzqewEXAckOuY7GqEflVY0IZCm5KJvPH+WMZtAMU+bybLh4a0wOqJe0NMK45MxI3afUr4A7rG24XX9dohuDDdlmn3aY4yq41z1+MdZnVFMt2GE6uzlv2IP9VkWV7AYlnZWpj411+wIGVH7KlhgBtJPWAlPffhQuB2GKTz7BjymtmV+dzRODjFjzvJu1jncCDjQ6sU514EW9hRlROxQmUlFKxqFYfp36ngtQJqMkyl33yWPGHqckwgPZp6nBlOI6M42+JuNTPsIKNwL+5N9OaEgvNbQAg/B2w73MSNaYAAAAAASUVORK5CYII=" alt="">

方法二 线筛  aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAATBAMAAAAOpGKDAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHZmmasi3Ym7RO8yVM0Ml5alAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA9UlEQVQYGT2QMU7DQBBF38bGLIkNKy4AIkKiQQRFtCjcwKKioEiDKDEHQPIFkFJRuwckQy7AERBU6cwNTJOKgr92nJF2/vt/RrvSQle7LfQaMQfjC0HaZmbi9cxx6+gVnlXfOlYLdsZ2E6h5eHbQr5txE9tPzFwU//HUBGr9FPsrTZaU8HU6vpYp2ZxJwpqM6GXOQqZmJ5cM0qgiCTIOZd7Y25ecTONK2zmXMvcMcsk7JtN2wVKmJKxgQ3fqjTuSqvBkHuBK0x84J8xHRFqww6OpsmMYEj86gpFcWzcdbLmOWON6CNFkNfb/1tVrC8FHF0ijliX/HNUrtUeIY3MAAAAASUVORK5CYII=" alt="">

对于大整数(>1e9),可以优化

方法三 利用费马小定理

假如p是质数,且gcd(a,p)=1,那么 a^(p-1) ≡1(mod p)。
即:假如a是整数,p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1。
我们这样写:a*a^(p-2) ≡1(mod p)
根据定义,a^(p-2)就是a (模p)的逆元
 
那么反过来,随机整数a能使p满足a^(p-1) ≡1(mod p)的话,那么p就是质数?
当然不是,虽然很大可能是,但是会有特殊的存在。
如2^340≡1(mod 341),但341=31*11
具体来说,特殊的数是费马伪素数和卡迈克尔数,这里不介绍了
 
方法四 二次探测定理
对于任意素数p, 满足方程aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMUAAAAVBAMAAAAEKDfsAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARFSZImYQMrvddqvNie8Nf0xcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC3UlEQVRIDbVUTUgUYRh+Znd+9sd2h6JDSTZYkAiVh5IoghEpIqodMGtFpKHoUBAOBREkbQhGeMkunjfCFL0sBdVFWCQIgij2kAcJ9ODdQLZLUe/3ffO5M+OsdfGD/d7ned5n3ne+n1mAjcRQF4/bOZ3H/HaW57VHUIzpoZdjRC41TTR7gOvfY7LZqGY8s4V0I5r5H65Phl3KR+IvwhqxNl9JOALsHTI3eZoKWS+UUqd/Eq+GNEbmpFLlwKjig1T+HafViId6yJcNZMYkrnGQsvBSKqorkYxnJRBRMTMMnHjKBpeoR8rmKDitS9LKQd7b2D3jjStzfnzY3RB2HtvdXfjzuyFwRD1ygDZ1c/B++zta09QiMNu+TGj2TB/Pka1ko+Rye2KcR+VAT58Q0PGKJYTbsB44zxkND+qRBnoeOYkFdAAncQkpJ1sBrg87SQd57t5PPWyGbo9yjrvGWNpkUJ+xuCLcGXoVh/PQRD0uANYAtAk6aa2KvFdEtgyYbdhRQc5lbmpAbYBeWikfZaOuMaCe8oQg3IHLgveh8xgh22lWdxw5B8PeKnLsyTlku5B2WY2Ch6MElBVG+MhUeGgzfS7cwILkwUjruEV8herq6yjYuKauo8Qco8hZ7Kxo5E0cYXFjHWixGG+sQ7gVtY4yT4Qm6kF11DUUaKNMKv7JWMOMQp469sgzTzn+F3PntXjYLLj8gkJfsoTC3QPapGYLHry7P4AWl51DEcmyk/a0Cpb1z7TZRh30H3AO6lvapMfyG9TGWQltYsC97NcqlhkQ7osH9x3y5UbQl34tImMh46AGpQa11g/sar93Bcgc77SBfhirZO88LDdemXdp2bWeGjsyPlq/URBuX4kJqji/SIb2h8YTuvrhRPx3LtxhZ4hRoc0jb5PG2kd6bHYyhbvjU0LtjUvyu5V06duJy0Y17o6KQa5YQSaw8uUrgav0s4Sw5SzcW1rsZtmmidgH/gIMvZoUzJQ+GwAAAABJRU5ErkJggg==" alt="">
有唯一解 x=1||p-1
证明
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMsAAABlBAMAAAARwwqeAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARFSZImYQMrvddqvNie8Nf0xcAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGaklEQVRoBe2ZTWgcVRzA/5Pdnd3sbrJLxYO1JkP8JKDmYEUswoQiSK1mtVYTpTi0KFSQLoofh9pEMRK8tL3E66otleay4EFhLS7FVvwollwqFGEV9JxCjBeL/v9v9r15X7OTWSMI7jvM+7//53szLzu/eQFI34YOTKUPSh+xB86lD0ofcRRm0wf1E/GTJchtWJRMFWuIC+jq3WWLQ0nX5Y/7oeqQbtnkuFRXHZ2vcfyhqsPRWFczVDNMm1KcySpu2TN/4Lit6GiwwjVtLqTqnWpR88cylikvcq9VLqTqZ/66Tv4PLFFjkVim4DNJvqzzwc1c2HS/7b4b7zedscwoQO70C8+9PvEZruz0FYCzEx2Uzj68j9nMmF6avPdm7aTpgGWGAaaP1YbOw10AD8LjUKiVmgAHj9QyNaiYEb01RZgPLPsGy+wF8OYgdwIffK4NlfoslBoA1TEYacJo0DurxSq2D3yuPJuj6PsQpX4fRmtwpP4rjNK2X4HSFAwHlkS9VedtZlzNYdT/jKnddZjx4fnsOsyT5zsw6tFzS9ec7AY0zBAsg6myazCDd6yK+b/Nr8EnDjpuwE19bIG53HLO75aRNvQ1gHJAz2QWMo3acD3XhI57KQeQ3wD8hXjEnFhvzWO33XKn4eFe/fMKFD0o1mAVnFXIru4HuGHi1acBijsnfQAcblXL4vY1W4Fty/dMQ98aa66Kj/nsM+iz0G5bHNttmcBm6lPneGag88NlVD5jGv6Bxo+LjTXEBQz0gzvwn78DbsM6RQYvMTZrRIwvJmfuBi2GVd0p7GNsh0IX9Wr4qtRp0iLAjjrA7ZjFYiPC1Jls+4GqzVehzrY6KRrtmccyZRTaNOq2gPU2wsy34SvVNwxZ6UZSGn1mzFTBMiOeanuiG4QvZHx7ya3gwceqb2hd5E7obqFFQP4BcJqqTS7DMFK8pNF7TPUN88vUSdRhoCSVgQ4jEmGTy6ioMu8jvaGqF3UiLZooycqsEUlGNrmMipHjWMZH317UibRooiQr8xuRZGSTy6gYiasZ99G3F3USLYZfIg6jyBqNWZlliGyZVuv7Vusy2WgLMIwU1DlTh3uDBOo8TKE6SrIyHUaSwqashoJEq1ThniTqxEdnomS3jGKLL4OUtJJEnUiLMkqGU8T5QXaBSDKy8TLX0IVhpNjQzgL+eSZQZ9EDAyVf/vJSHXI1IsnIFpZhhKlj5OTd1STqjGW1QqByHF8NrdeCfvY8EXVaQigTPKqle5Fp2cWa0ponos7dUbgi0SdmjC0TKJ7hwOobUafjWWLwl4N+bxwPL2azYqTjmY4ydfqmGTXhCYPdlkaLqezuaBi0wR0Y3IGtvQMvWdOlZmGRJX88ELIkNCU5ElOzcBTK4TTSoFTEN57eUrKwFn5VG7NhWVK6oWxl4dBkY2EpARMv6AoaE8HzluuujNBhRGNh7mOyMLfwnjyM9q6kkcvoLMzdKEnPI1VnLf8sTJ7aP8UjWN/Bt9Ct0/sCGshldBYmOzUqo7IwU0eXkYU3jrl3/A47UbWrhe0c2U4AvJJfHK6SrJTRWJjs1KiMysJMHV3KV6oHHacDyk7ItvEjL7+RY25KGY2FeR62moCPLH3lbVQWm/CpbMNPJqbE667WF9+FK2T0KLOwxMlUhrEw9tY2/tYCfv548ItsdfGmQdkLVcpqNBbmQYnP5kc4mYdK4FDi6Nl0AKozAfttUZ8N+xwyOTmxzAX4YAi/j8p1PjHWX8Qj7bngKSaL1eCGyGoszBzwIliYK/R+GSbxo/LJU6r+IzwxnV4NS3fLWFk4jLKysJqQjRZ1HcEob3w1NNZZmPtQbwVS2QHEZyrXYjrRXEmm8jHprCwskpCAh+Nay05piu4wLQsrWXZcV4Y02GZoSJGaha1ZJGVIvZKCielZWM8wGA/uwP/xDriNuFXHGuICeulLulE9UtWt6cavkfu/9I98aSbbUY5DyxXu1+ZC3z2VYZRkOZoV7yr1BHaTtTLseG8h9BZlCr4RLt5VPanTCBO0KVlEmYQjVSkkSRS0yR1xXd8sLS2wm5ZwpMpDNtEL2pR8xWr29j5SlUISRURQbCXrs0k4Uk3MLTlw2pRUYjV0NLs1/8gXtGkrg1tga/6Rz2nTsqERLROOVKWZJYgRbXLH7k4b/COf35DUfcKRaup8MQGOZxrkI1XT2p/GjwtDw9+JGuW4BQ3PCgAAAABJRU5ErkJggg==" alt="">
 
方法五 Miller Rabin算法
逆用费马小定理加上二次探测,就得到了 Miller Rabin 算法。
Miller Rabin 算法有一定的出错概率,出错的情况一定是将合数判定为素数,且出错概率极低
 
对于一个奇素数(偶素数只有2嘛),显然p-1是偶数
则有推导过程如下:
aaarticlea/png;base64,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" alt="">
 
所以算法实现过程有两步:
1.枚举k,对于每一个k,检验是否满足二次探测定理(即上面的最后一步)
2.再检验aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAACYAAAAQBAMAAACIMBAtAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdlQyIrtmq82J70QQmd0a05NiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAsklEQVQYGWNgQAZMmReQuWC2I0Mlw7ZcVGELhlSeAHewGI/kpitJExgOAjkzmQXSwGJs/AaiDA/YHZMYeN4wzG6B6DVlqOZ5wHNvAwO7AQNDA0RMkOEN0wV2zdsMwiwMTG8gYsU8D9i3MZxk4N7ACBZgFDJhCGCewCjMwMPg//8nWCyMoQKiGEGyBQDdiQa4EhhWowkx+Dswf0AXs2dgDNiAJsjFcGJCApoY9yXlawdQxQB8VCWO20gk9wAAAABJRU5ErkJggg==" alt="">即aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQBAMAAACFLmBqAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdlQyIrtmq82J70QQmd0a05NiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAAg0lEQVQYGWNgQAY8qsg8IJtJA02AwQMiwCObNgHCggqwcR0oRhFgMGWIZpw5c6YATAtDIsMaVBXVbFAz/IDijEImDM8UIQq4Z6UwMIQxVPA8gPDBJFsAQyX3BSQBrgSG1UdjkAT8HZg/IHEZGOwZGAM2IItwMZyYkIAswH1J+doBJAEAnnoYCfcgYtYAAAAASUVORK5CYII=" alt="">是否满足费马小定理aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAH8AAAAVBAMAAACd/CwcAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdlQyIrtmq82J70QQmd0a05NiAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACAUlEQVQ4EZ1SP2jUUBz+cpdLNMn9qWJvEOF6IjjeYEFEaRZFFO0p6KLgE21d/HPQpeJSdXLyuA5yTp1c6nCbUFCCoLhoq0PBrZNzwRsEO/i95MXkJRGhGe59v+9f3r0XIP14R9LTLnDp6C5CWuSsNqnBaxSxkosF79B8P/IUFtjZfPmGH1GflWI5wUIEswXuU/IHlS1Z1hQsCQWmcc0YDocNZArM/T/pWFKuZGnGMJZu4nVEZQoAFvx9TZwCrsZwoMAjS53BRUlUr8inG2osqPghSv+M4+ENgbHvGH5MRYz78nYsqZUFDmBNfrxzsr3A3UwuAxPtFaKJM/dCjdtZ9LYysWRkQQ04f0KUnoBf2VecQ0XYPeD9uqgK1FnexUN3I0lkEAt4Lq37sLbQhLWEemcOdgMYrWFvD04AR2D1w3UtZutncJzidxm6JM3rnVdwOqSasDdQCzDrl7e1uD5wB1/IrDLkjWnGA3OMGem5DKclz2cGRnekh9ITC2gytzHL/Y+YfMz3HXBp2cG7UHPwqS/SEf0afwN7Avnf51BtiFrH6mHFe2YB5R3wKz0NuN8ObwZ6QTJ5L34tw2jBEBjAHcAczANv26fu8vY3p3yA4/8fs1fkqQjJ6qdf5Punq+5TKu7O9VzIMSTCm6gGRVKOc1s5Cu7zPslbeaGQ8QtZkhT+AOtwZG8D7+pXAAAAAElFTkSuQmCC" alt="">
 
对于任意一个p,如果通过了算法检验,则它不是素数的概率是25%
那么k轮之后,p不是素数的概率就是0.25^k,就很小了
一般8-10轮就差不多了
那么对于a的选择,可以选前面几个质数:2,3,5,7,11等,也可以用随机数
时间复杂度一般是aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEgAAAATBAMAAADBilZAAAAAMFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEHZmmasi3Ym7RO8yVM0Ml5alAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABkklEQVQoFV1Sv0vDYBB9aWKMbdoEVxGLIrio1VJxkvofBCcHhy6igz/BSRQCxUFQ6OTgYvYqRvsPOAo6lNbFRSLOQlwydfBdTSR68H3v3b2XuxwJkMRwQv5hpp8r4+VlEgfmlQ0YB/9MSlUKFRsbNjIe0JT0U650dJkYDk8DBdIT0b7kSocoTc7IhhD/B092L20QbrShtIhmDxeEnpSqvP5E1oEh7fMRfOlnzqNQAjqLD1Dqc3ZnrrxG1cdgg6CF4BSj8fwEqwatqPvYsUcWrlt4pRrCcgk5Rw+Awpk3KhsuyeBPWNvqHiap3mGsSJitmTRZl6TcsAWlx1Wa0FyssLSPnEu4h8Jxt48c/QE9ghpmAtpzHiKqPrQAGKDoA6c4NBFtmSEKRa1K+y7ygSeScgys0v4uTY7ySljCESrIO2rEl9PcEnS2MCamajRNy+xOG3UPm90SUO/4mIB5bkNlFsd6QhKUz9WPITspIUV/aoPtWEs9rld//UJm8Jbk8h8lcZOQPr503ThXH2IioKd4mrL+DejaXpq1xURbAAAAAElFTkSuQmCC" alt="">,k为测试的轮数
//里面有龟速乘和快速幂,防越界
inline int slow_mult(int a,int b,int mod){
int ans=;
while(b){
if(b&) ans=(ans+a)%mod;
a=(a+a)%mod;
b>>=;
}
return ans;
} inline int quick_pow(int a,int b,int mod){
int ans=;
while(b){
if(b&) ans=slow_mult(ans,a,mod);
a=slow_mult(a,a,mod);
b>>=;
}
return ans;
} inline bool Miller_Rabin(int p){
if(p==) return true;
if(p==||p%==) return false;
int u=p-,t=;
while(u%==) u/=,t++;
for(int i=;i<=;i++){//我测了十次
int a=rand()%(p-)+;
int x=quick_pow(a,u,p);
if(x==) continue;
for(int j=;j<=t;j++){
int y=slow_mult(x,x,p);
if(y== && x!= && x!=p-) return false;//二次探测定理
x=y;//递推求2的幂
}
if(x!=) return false;//费马小定理
}
return true;
}

【数论基础】素数判定和Miller Rabin算法的更多相关文章

  1. Miller Rabin 算法简介

    0.1 一些闲话 最近一次更新是在2019年11月12日.之前的文章有很多问题:当我把我的代码交到LOJ上,发现只有60多分.我调了一个晚上,尝试用{2, 3, 5, 7, 11, 13, 17, 1 ...

  2. Miller Rabin算法详解

    何为Miller Rabin算法 首先看一下度娘的解释(如果你懒得读直接跳过就可以反正也没啥乱用:joy:) Miller-Rabin算法是目前主流的基于概率的素数测试算法,在构建密码安全体系中占有重 ...

  3. Miller Rabin算法学习笔记

    定义: Miller Rabin算法是一个随机化素数测试算法,作用是判断一个数是否是素数,且只要你脸不黑以及常数不要巨大一般来讲都比\(O(\sqrt n)\)的朴素做法更快. 定理: Miller ...

  4. Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法

    BZOJ 3667: Rabin-Miller算法 Time Limit: 60 Sec  Memory Limit: 512 MBSubmit: 1044  Solved: 322[Submit][ ...

  5. 与数论的厮守01:素数的测试——Miller Rabin

    看一个数是否为质数,我们通常会用那个O(√N)的算法来做,那个算法叫试除法.然而当这个数非常大的时候,这个高增长率的时间复杂度就不够这个数跑了. 为了解决这个问题,我们先来看看费马小定理:若n为素数, ...

  6. (Miller Rabin算法)判断一个数是否为素数

    1.约定 x%y为x取模y,即x除以y所得的余数,当x<y时,x%y=x,所有取模的运算对象都为整数. x^y表示x的y次方.乘方运算的优先级高于乘除和取模,加减的优先级最低. 见到x^y/z这 ...

  7. Miller-Rabin算法 codevs 1702 素数判定 2

    转载自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且 ...

  8. 关于素数:求不超过n的素数,素数的判定(Miller Rabin 测试)

    关于素数的基本介绍请参考百度百科here和维基百科here的介绍 首先介绍几条关于素数的基本定理: 定理1:如果n不是素数,则n至少有一个( 1, sqrt(n) ]范围内的的因子 定理2:如果n不是 ...

  9. Miller Rabin素数检测与Pollard Rho算法

    一些前置知识可以看一下我的联赛前数学知识 如何判断一个数是否为质数 方法一:试除法 扫描\(2\sim \sqrt{n}\)之间的所有整数,依次检查它们能否整除\(n\),若都不能整除,则\(n\)是 ...

随机推荐

  1. cli命令速查

    在文件的指定行(n)插入指定内容: sed -i "niecho "haha"" a 执行后,在a文件的第n行插入echo "haha" 多 ...

  2. 模糊字符串匹配:FuzzyWuzzy

    FuzzyWuzzy 模糊字符串匹配,它使用Levenshtein Distance来计算简单易用的包中序列之间的差异. 前置条件 Python 2.7 or higher difflib pytho ...

  3. springmvc配置数据源方式

    1 阿里巴巴的druid数据源 <!-- 配置数据源 使用的是Druid数据源 -->-<bean destroy-method="close" init-met ...

  4. Display a QMessageBox from a QThread

    Emit a signal. Since you cannot do UI stuff in a Qthread, instead send your message as an argument o ...

  5. AjaxControlToolkit的安装步骤

    1.下载: 下载地址:http://www.codeplex.com/AtlasControlToolkit/Release/ProjectReleases.aspx 打开网址后找到这些: AjaxC ...

  6. 理解分布式一致性:Paxos协议之Multi-Paxos

    理解分布式一致性:Paxos协议之Multi-Paxos Multi-Paxos without failures Multi-Paxos when phase 1 can be skipped Mu ...

  7. 提高Web服务器并发响应的经历

    1 前言 ---------- 最近一直在维护一个线上运行的旧系统,系统本身的问题很多,然而又有大量客户准备试用.之前一直存有侥幸心理,希望系统能神奇的顶过这段时间,但这个蜗牛般的系统残忍的告诉我们- ...

  8. 使用ScriptX控件进行Web横向打印

    一个需求需要采用横向打印,目前采用IE自身的打印功能(WebBrowser.ExecWB控件)很难进行横向设置,默认需要调用document.all.WebBrowser.ExecWB(8,1);打开 ...

  9. String-StringBuilder-StringBuffer 的区别

    String StringBuilder StringBuffer 的区别 String:不可改变的字符串,不能够被修改                    (https://baijiahao.b ...

  10. 2) 接口规范 原生django接口、单查群查 postman工具 CBV源码解析

    内容了解 """ .接口:什么是接口.restful接口规范 .CBV生命周期源码 - 基于restful规范下的CBV接口 .请求组件.解析组件.响应组件 .序列化组件 ...