初等数论c++
备注:纯手写代码,注释。
数论
1、素数
(1)暴力求解法
根据素数的概念,没有1和其本身没有其他正因数的数。 所以只需枚举比这个数小的数,看能整除即可; C++代码:
#includeiostream
#includecstdio
#includecmath
using namespace std;
bool determine(int number)
{
if(n=2)return false;
if(!n%2)return false;
for(int i=3;i=ceil(sqrt(number));i+=2)
//去掉了偶数的判断,效率提高一倍
/*如果number整除以i,那么会得到两个的因数,
而较小的那个因数不会超过number的二分之一次方;
所以只需判断到number的平方根向上取整即可; */
if(number%i);
else return false;
return true;
}
int main()
{
int sum;
cin
if(determine(sum))
coutYES!
else coutNO!
return 0;
}
时间复杂度:o(sqrt(n)/2);
空间复杂度:几乎没有;
(2)一般线性筛法:
因为任何一个合数都能分解成几个素数相乘的形式;
所以可以做一个表,首先把2设为质数,然后将2的倍数设为合数,剩下的数就是新得到的质数,然后重复这个过程,直到筛到合适的范围即可;
但是这个算法有缺陷:
1、 同一个数可能被筛多次,这就产生了多余的步骤。
2、 占用空间很大,如果使用bool数组的话,只能筛到1e9;
3、 从1-n筛,不能从m-n开始筛;
C++代码:
#includecstring
#includecmath
#includeiostream
using namespace std;
bool s[1000000000];
int m,n;
int main()
{
cinm
memset(s,true,n);
s[0]=s[1]=0;
//输出M—N之间所有素数;
for(int i=2;i=ceil(sqrt(n));++i)
if(s[i])
{
for(int j=i;j++j)
if(s[i*j])
s[i*j]=false;
}
for(int i=m;i++i)
if(s[i])
couti
return 0;
}
时间复杂度:o(n*loglogn);
空间复杂度:很大!注意数据大的话可能会爆空间;
(3)线性筛法求素数
这个占空间就更大了,需要使用一个bool数组和int数组 而亲身试验得到int数组最多开到1e8……
很无语,快确实是快了,但是测试数据一大,爆空间就更容易了; #includeiostream
#includecstdio
#includecmath
using namespace std;
int m,n,sum;
bool inp[1000000000];
int s[100000000]={0,0};
int main()
{
cinm
for(int i=2;i++i)
{
if(!inp[i])
s[sum++]=i;
for(int j=0;ji*s[j]++j) {
inp[i*s[j]]=true;
if(!(i*s[j]))
break;
}
}
for(int i=m;i++i)
if(!inp[i])
couti
return 0;
}
2、唯一分解定理
任何数都可以被唯一的分解成多个素数之积 例如:456=2*2*2*3*19;
C++代码:
#includecstring
#includecmath
#includeiostream
#includealgorithm
#includecstdlib
using namespace std;
bool s[1000000];
int m,n,sum=0,num;
int Prime[1212121];
int zhi[1500];
void Primes()
{
for(int i=1;i++i) s[i]=true;
s[0]=s[1]=0;
for(int i=2;i++i) if(s[i])
{
Prime[++sum]=i;
for(int j=i;j++j) if(s[i*j])
s[i*j]=false; }
}
int main()
{
int flag=0;
cin
int number=num;
Primes();
if(s[num])
{
coutnum'=' return 0;
}
coutnum=str.chu(); while(num1)
for(int i=1;num=sum;++i) if(!(num%Prime[i])) {
zhi[++flag]=Prime[i]; num/=Prime[i]; }
sort(zhi+1,zhi+flag+1);
coutzhi[1];
for(int i=2;i++i)
cout*
return 0;
}
首先做一个质数表,并把质数存到数组里,然后用数模每个素数,如果为0则记录素数,最后排个序输出;
4、 欧拉函数
欧拉函数φ(n)为不大于n的与n互素的数的个数;
A与B互素,表示a与b的最大公约数为1,即(a,b)=1; 欧拉函数的符号φ读作fhi,在搜狗的特殊符号里可以找到;
,其中pi为x的质因数,其中
φ(1)=1(唯一与1互质的数是1本身) 设n为正整数,以 φ(n)表示不超过n且与n互素的正整数的个数,称为n的欧拉函数值
φ:N→N,n→φ(n)称为欧拉函数。
几个性质(来自百度百科)
1、若n是质数p的k
次幂,
的倍数外,其他数都跟n互质。
2、欧拉函数是积性函数——若m,n互质,
3、特殊性质:当n为奇数时,
4、若n为质数则 ,因为除了p , 证明与上述类似。
5、设p是素数,a
是一个正整数,那么 C++实现:
#includecstring
#includecmath
#includeiostream
#includealgorithm
#includecstdlib
using namespace std;
bool s[1000000];
int m,n,sum=0,num;
int Prime[1212121];
int zhi[1500];
bool asd[1500];
int phi(int n)
{
int i,rea=n;
for(i=2;i*ii++)
{
if(n%i==0)
{
rea=rea-rea/i;
while(n%i==0) n/=i;
}
}
if(n1)
rea=rea-rea/n; return rea;
}
void Primes()
{
for(int i=1;i++i) s[i]=true;
s[0]=s[1]=0;
for(int i=2;i++i) if(s[i])
{
Prime[++sum]=i;
for(int j=i;j++j) if(s[i*j])
s[i*j]=false; }
}
int main()
{
int flag=0;
cin
int number=num;
Primes();
if(num==1||!num)
{
coutfhinumber)= cout
return 0;
}
if(s[num])
{
coutfhinumber)=number-1; return 0;
}
while(num1)
for(int i=1;num=sum;++i)
if(!(num%Prime[i]))
{
zhi[++flag]=Prime[i];
num/=Prime[i];
}
int fenzi=1,fenmu=1;
sort(zhi+1,zhi+flag+1);
for(int i=1;i++i)
if(!asd[zhi[i]])
{
asd[zhi[i]]=true;
fenzi*=zhi[i]-1;
fenmu*=zhi[i];
}
coutfhi(number)=number/fenmu*fenzi; //coutfhi(number)=fhi(number); /*这是另一种求欧拉函数值的方法*/
return 0;
}
5、欧几里得算法
辗转相除法,根据公式(a,b)=(b,r)
其中r为a%b,即a/b;
C++代码:
(1)递归
#includeiostream
#includecstdio
using namespace std;
int GCD(int a,int b) {
if(a%b)
return GCD(b,a%b); else return b; }
int main()
{
int a,b;
cina
coutGCD(a,b); return 0;
}
(2)递推
#includeiostream using namespace std; int main()
{
int a,b,r;
cina
r=m%n;
while(r!=0)
{
a=b;
b=r;
r=m%n;
}
cout
return 0;
}
6、扩展欧几里得 扩展欧几里得又称斐蜀定理,对于不完全为 0 的非负整数 a,b,gcd(a,b)表示 a,b 的最大公约数,必然存在整数对 x,y ,使得 gcd(a,b)=ax+by;
求同余方程
#includecstdio
void exgcb(int a,int b,int x,int y)
{
if(!b)
{
x=1;y=0;
return;
}
int q=a/b;
int r=a%b; exgcb(b,r,y,x);
y-=q*x;
}
int main()
{
int x,y;
int a,b;
scanf(%d %da,
exgcb(a,b,x,y);
while(x0)
x+=b;
printf(%d
return 0;
}
求乘法逆元
#includecstdio
void exgcb(int a,int b,int x,int y) {
if(!b)
{
x=1;y=0;
return;
}
int q=a/b;
int r=a%b;
exgcb(b,r,y,x);
y-=q*x;
}
int Multiplicative inverse(int a,int b) {
int x,y;
int gcb=GCD(a,b,x,y);
if(1%gcb)return -1;
x*=1%gcb;
b=abs(b);
int answer=x%b;
while(answer=0)
answer+=b;
return answer;
}
int main()
{
int x,y;
int a,b;
scanf(%d %da,
exgcb(a,b,x,y);
while(x0)
x+=b;
printf(%dn
coutMultiplicative inverse(a,b); return 0;
}
求线性方程ax+by=c
这个方程等同于ax≡c(mod b) 所以
下载文档
热门试卷
- 2016年四川省内江市中考化学试卷
- 广西钦州市高新区2017届高三11月月考政治试卷
- 浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
- 浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
- 辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
- 广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
- 广西钦州市钦州港区2017届高三11月月考政治试卷
- 广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
- 广西钦州市高新区2016-2017学年高二11月月考政治试卷
- 广西钦州市高新区2016-2017学年高一11月月考政治试卷
- 山东省滨州市三校2017届第一学期阶段测试初三英语试题
- 四川省成都七中2017届高三一诊模拟考试文科综合试卷
- 2017届普通高等学校招生全国统一考试模拟试题(附答案)
- 重庆市永川中学高2017级上期12月月考语文试题
- 江西宜春三中2017届高三第一学期第二次月考文科综合试题
- 内蒙古赤峰二中2017届高三上学期第三次月考英语试题
- 2017年六年级(上)数学期末考试卷
- 2017人教版小学英语三年级上期末笔试题
- 江苏省常州西藏民族中学2016-2017学年九年级思想品德第一学期第二次阶段测试试卷
- 重庆市九龙坡区七校2016-2017学年上期八年级素质测查(二)语文学科试题卷
- 江苏省无锡市钱桥中学2016年12月八年级语文阶段性测试卷
- 江苏省无锡市钱桥中学2016-2017学年七年级英语12月阶段检测试卷
- 山东省邹城市第八中学2016-2017学年八年级12月物理第4章试题(无答案)
- 【人教版】河北省2015-2016学年度九年级上期末语文试题卷(附答案)
- 四川省简阳市阳安中学2016年12月高二月考英语试卷
- 四川省成都龙泉中学高三上学期2016年12月月考试题文科综合能力测试
- 安徽省滁州中学2016—2017学年度第一学期12月月考高三英语试卷
- 山东省武城县第二中学2016.12高一年级上学期第二次月考历史试题(必修一第四、五单元)
- 福建省四地六校联考2016-2017学年上学期第三次月考高三化学试卷
- 甘肃省武威第二十三中学2016—2017学年度八年级第一学期12月月考生物试卷
网友关注
- 教师资格考试教育学常见考点二
- 2014年教师资格考试:教育学考试最佳答题方略
- 2014年教师资格考试中学教育学资料七:小学德育的目标与内容
- 2014年教师资格考试综合指导:教师法律法规三
- 2014年教师资格考试中学教育学资料六:小学德育概述
- 2014年教师资格考试中学教育学资料九:德育的原则、途径和方法
- 教师资格考试《高等教育学》考点归纳:高等学校教学过程与教学原则
- 2014年教资考试中学教育心理学辅导三:学习的基本理论
- 2014年教资考试中学教育心理学考点辅导一:大学生的学习动机及其激发
- 教师资格证考试|高等教育心理学考点精髓:大学生的学习动机
- 2014年教师资格统考教育知识与能力备考指导
- 2014年教师资格考试中学教育学资料一:课外活动概述
- 2014年教资考试教育学公共基础知识案例分析题三
- 2014年教资考试教育学公共基础知识案例分析题二
- 教师资格考试《高等教育学》考点归纳:高等学校的专业设置与人才培养
- 2014年教资考试中学教育心理学考点辅导四:大学生的心理发展
- 教师资格证考试|高等教育心理学考点精髓:学习理论
- 2014年教师资格考试综合指导:教师法律法规五
- 教师资格证考试|高等教育心理学考点精髓:高等学校学生心理
- 教师资格证考试|高等教育心理学考点精髓:高等学校教师心理
- 教资备考|常考中国教育学家总结
- 教师资格备考:教育心理学的重点人物
- 教师资格考试《高等教育学》考点归纳:高等教育的目的
- 指导——四幅图教你学习知觉的基本特征
- 教师资格证考试|高等教育心理学考点精髓:绪论
- 教师资格辅导资料:教育心理学在西方的发展
- 2014年教资考试中学教育心理学考点辅导二: 大学生学习心理概述
- 教师资格考试《高等教育学》考点归纳:高等教育结构
- 2014年教师资格考试综合指导:教师法律法规二
- 2014年教师资格考试中学教育学资料四:班主任工作概述
网友关注视频
- 七年级英语下册 上海牛津版 Unit5
- 二年级下册数学第二课
- 冀教版英语四年级下册第二课
- 【部编】人教版语文七年级下册《逢入京使》优质课教学视频+PPT课件+教案,安徽省
- 【获奖】科粤版初三九年级化学下册第七章7.3浓稀的表示
- 苏科版数学 八年级下册 第八章第二节 可能性的大小
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 12
- 冀教版小学数学二年级下册第二单元《余数和除数的关系》
- 【部编】人教版语文七年级下册《老山界》优质课教学视频+PPT课件+教案,安徽省
- 8.对剪花样_第一课时(二等奖)(冀美版二年级上册)_T515402
- 冀教版小学数学二年级下册第二周第2课时《我们的测量》宝丰街小学庞志荣
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 8
- 沪教版八年级下册数学练习册20.4(2)一次函数的应用2P8
- 19 爱护鸟类_第一课时(二等奖)(桂美版二年级下册)_T3763925
- 七年级英语下册 上海牛津版 Unit3
- 【部编】人教版语文七年级下册《老山界》优质课教学视频+PPT课件+教案,安徽省
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 3
- 沪教版牛津小学英语(深圳用) 四年级下册 Unit 2
- 河南省名校课堂七年级下册英语第一课(2020年2月10日)
- 沪教版八年级下册数学练习册21.3(2)分式方程P15
- 沪教版牛津小学英语(深圳用) 五年级下册 Unit 12
- 《小学数学二年级下册》第二单元测试题讲解
- 沪教版八年级下册数学练习册21.3(3)分式方程P17
- 北师大版小学数学四年级下册第15课小数乘小数一
- 【部编】人教版语文七年级下册《过松源晨炊漆公店(其五)》优质课教学视频+PPT课件+教案,江苏省
- 3.2 数学二年级下册第二单元 表内除法(一)整理和复习 李菲菲
- 【部编】人教版语文七年级下册《泊秦淮》优质课教学视频+PPT课件+教案,天津市
- 苏科版数学八年级下册9.2《中心对称和中心对称图形》
- 沪教版牛津小学英语(深圳用)五年级下册 Unit 1
- 【部编】人教版语文七年级下册《泊秦淮》优质课教学视频+PPT课件+教案,辽宁省
精品推荐
- 2016-2017学年高一语文人教版必修一+模块学业水平检测试题(含答案)
- 广西钦州市高新区2017届高三11月月考政治试卷
- 浙江省湖州市2016-2017学年高一上学期期中考试政治试卷
- 浙江省湖州市2016-2017学年高二上学期期中考试政治试卷
- 辽宁省铁岭市协作体2017届高三上学期第三次联考政治试卷
- 广西钦州市钦州港区2016-2017学年高二11月月考政治试卷
- 广西钦州市钦州港区2017届高三11月月考政治试卷
- 广西钦州市钦州港区2016-2017学年高一11月月考政治试卷
- 广西钦州市高新区2016-2017学年高二11月月考政治试卷
- 广西钦州市高新区2016-2017学年高一11月月考政治试卷
分类导航
- 互联网
- 电脑基础知识
- 计算机软件及应用
- 计算机硬件及网络
- 计算机应用/办公自动化
- .NET
- 数据结构与算法
- Java
- SEO
- C/C++资料
- linux/Unix相关
- 手机开发
- UML理论/建模
- 并行计算/云计算
- 嵌入式开发
- windows相关
- 软件工程
- 管理信息系统
- 开发文档
- 图形图像
- 网络与通信
- 网络信息安全
- 电子支付
- Labview
- matlab
- 网络资源
- Python
- Delphi/Perl
- 评测
- Flash/Flex
- CSS/Script
- 计算机原理
- PHP资料
- 数据挖掘与模式识别
- Web服务
- 数据库
- Visual Basic
- 电子商务
- 服务器
- 搜索引擎优化
- 存储
- 架构
- 行业软件
- 人工智能
- 计算机辅助设计
- 多媒体
- 软件测试
- 计算机硬件与维护
- 网站策划/UE
- 网页设计/UI
- 网吧管理