清北学堂(2019 5 1) part 4
今天讲数论
1.进制问题(将n转换成k进制数):
1.方法:短除法
将n/k,保存,将商当做新的n,将余数保存,直到商为0,将余数(包括0),倒序输出,即得n的k进制数
2.关于高精四则运算(我本以为不用怎么整的):
举个加和乘的例子...
众所周知,a+b problem是最简单的红题,再加个*也无伤大雅,代码如下(没文件头):
int main(){
int a,b;
cin>>a>>b;
cout<<a*b;
return ;
}
直到你加了这些东西:
#include<bits/stdc++.h>
using namespace std;
struct nu{
int a[];
int l;
nu(){
l=;
memset(a,,sizeof(a));
}
friend istream& operator>>(istream &cin,nu &x){ //意思是:重载>>(用于cin,读到x里面)
static char s[];
cin>>s;
int l=strlen(s);
for(int i=;i<=l;i++)
x.a[i]=s[l-i-]-'';
x.l=l;
return cin;
}
friend ostream& operator<<(ostream &cout,const nu &x){ //与上面大同,多了个const,在于使x值在输出前后值相同
for(int i=x.l-;i>=;i--)
cout<<x.a[i];
}
};
nu operator+(const nu &x,const nu &y){ //重载+
nu ans;
int len=max(x.l,y.l);
for(int i=;i<len;i++)
ans.a[i]+=x.a[i]+y.a[i];
for(int i=;i<len;i++){
if(ans.a[i]>=){
int now=ans.a[i]/;
ans.a[i+]+=now;
ans.a[i]%=;
}
while(ans.a[len+]) len++;
}
ans.l=len;
return ans;
}
nu operator*(const nu &x,const nu &y){ //重载*用了非常简单而经典的高精算法
nu ans;
for(int i=;i<x.l;i++)
for(int j=;j<y.l;j++)
ans.a[i+j]+=x.a[i]*y.a[j];
ans.l=x.l+y.l;
for(int i=;i<ans.l;i++){
ans.a[i+]+=ans.a[i]/;
ans.a[i]%=;
}
while(ans.l>&&!(ans.a[ans.l]))
ans.l--;
ans.l++;
return ans;
}
int main(){
nu a,b;
cin>>a>>b;
cout<<a*b;
return ;
}
6-9行是构造函数,用于memset
10-22是重载cin与cout,背过就好
加const的原因是进行运算的值由符号返回,而从不是变量本身,所以没有赋值的话不能改变变量的值,也更方便电脑理解,可以看到stl里面好多函数用了const
至于&符号,用因如下:
每次用函数运算时,每个函数形如 f(int n),都要把用的变量“n”的值拷贝一份进行运算,如果引用数组就更慢,还更占内存,用了&符号意在免去拷贝操作,直接引用其值,
(反正有了const不用怕数值变化)这就算一个优化
后面一直到主函数之前都是重载运算符
3.关于素数(又是各种筛法)
粘下模板:
1.埃氏筛:
#include<bits/stdc++.h>
using namespace std;
bool no[]={,};
int pri[];
int tot;
inline void p(int t){
for(int i=;i<=t;i++)
if(!no[i]){
pri[++tot]=i;
for(int j=i+i;j<=t;j+=i)
no[j]=;
}
}
int n;
int main(){
scanf("%d",&n);
p(n);
for(int i=;i<=tot;i++)printf("%d\n",pri[i]);
return ;
}
欧拉筛(线性筛):
#include<bits/stdc++.h>
using namespace std;
bool no[];
int pri[];
int tot;
int n;
inline void p(int n){
for(int i=;i<=n;i++){
if(!no[i])
pri[++tot]=i;
for(int j=;j<=n&&i*pri[j]<=n;j++){
no[i*pri[j]]=;
if(!(i%pri[j])) break;
}
}
}
int main(){
scanf("%d",&n);
p(n);
for(int i=;i<=tot;i++)printf("%d\n",pri[i]);
return ;
}
3.exgcd:
#include<bits/stdc++.h>
using namespace std;
int a,b,x,y;
inline int exgcd(int a,int b,int &x,int &y){ //利用性质gcd(a,b)=gcd(b,a%b)
if(!b){
x=;
y=;
return a;
}int g=exgcd(b,a%b,x,y);
int t=x;
x=y;
y=(t-(a/b)*x);
return g;
}
int main(){
cin>>a>>b;
exgcd(a,b,x,y);
if(x<) x+=b;
cout<<x;
return ;
}
练多了不解释...
下午考试了..我..应该..大概不会爆零
清北学堂(2019 5 1) part 4的更多相关文章
- 清北学堂2019.8.10 & 清北学堂2019.8.11 & 清北学堂2019.8.12
Day 5 杨思祺(YOUSIKI) 今天的难度逐渐上升,我也没做什么笔记 开始口胡正解 今天的主要内容是最小生成树,树上倍增和树链剖分 最小生成树 Prim 将所有点分为两个集合,已经和点 1 连通 ...
- 清北学堂2019.7.18 & 清北学堂2019.7.19
Day 6 钟皓曦 经典题目:石子合并 可以合并任意两堆,代价为数量的异或(^)和 f[s]把s的二进制所对应石子合并成一堆所花代价 枚举s的子集 #include<iostream> u ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 7月清北学堂培训 Day 3
今天是丁明朔老师的讲授~ 数据结构 绪论 下面是天天见的: 栈,队列: 堆: 并查集: 树状数组: 线段树: 平衡树: 下面是不常见的: 主席树: 树链剖分: 树套树: 下面是清北学堂课程表里的: S ...
- <知识整理>2019清北学堂提高储备D2
简单数据结构: 一.二叉搜索树 1.前置技能: n/1+n/2+……+n/n=O(n log n) (本天复杂度常涉及) 2.入门题引入: N<=100000. 这里多了一个删除的操作,因此要 ...
- <知识整理>2019清北学堂提高储备D3
全天动态规划入门到入坑... 一.总概: 动态规划是指解最优化问题的一类算法,考察方式灵活,也常是NOIP难题级别.先明确动态规划里的一些概念: 状态:可看做用动态规划求解问题时操作的对象. 边界条件 ...
- 清北学堂(2019 4 28 ) part 1
今天主要用来铺路,打基础 枚举 没什么具体算法讲究,但要考虑更优的暴力枚举方法,例如回文质数,有以下几种思路: 1.挨个枚举自然数,再一起判断是否是回文数和质数,然而一看就不是最优 2.先枚举质数再判 ...
随机推荐
- GDI+绘制图形和画刷填充图形
GDI+可以再Windows窗体应用程序中以编程方式绘制图形等. 可以在VS里新建项目-Windows窗体应用程序-建一个窗体.首先引入命名空间using System.Drawing.Imaging ...
- Testlink安装:Notice:Undefined index: type in C:\inetpub\wwwroot\testlink-1.9.3\install\installCheck.php on line 41
问题现象:
- android 手机设置铃声
和应用程序相比,普通用户在初初接触智能手机时最先反而会对多媒体功能产生兴趣,尤其是铃声.壁纸设定之类个性化功能,更是让不少追求时尚的年轻人乐此不疲.对于Android手机来说,其铃声.图片的个性化空间 ...
- MySQL优化器不使用索引的情况
优化器选择不适用索引的情况 有时候,有乎其并没有选择索引而去查找数据,而是通过扫描聚集索引,也就是直接进行全表的扫描来得到数据.这种情况多发生于范围查找.JOIN链接操作等情况.例如 ; 通过SHOW ...
- jQuery中获取特定顺序子元素(子元素种类不定)的方法
提出问题:只已知父元素和父元素中子元素的次序,怎么通过jQuery方法获得该元素? <p>第一部分:</p> <ul> <li>1</li> ...
- 004-mysql explain详解
一.使用 使用explain + 查询语句 二.解释说明 1)id列[执行顺序] id列数字越大越先执行,如果说数字一样大,那么就从上往下依次执行,id列为null的就表是这是一个结果集,不需要使用它 ...
- 字符串之_strncat
功能:将src的前n个字符添加到dest的后面 输入:dest,src,count 返回:ret #include <iostream> #include <assert.h> ...
- Http1.0和Http1.1的主要区别
1.HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理 HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器 ...
- 深入理解MVC架构
MVC MVC是一种设计模式(Design pattern),也就是一种解决问题的方法和思路, 是上世纪80年代提出的,到现在已经颇有历史了. MVC的意义在于指导开发者将数据与表现解耦,提高代码,特 ...
- HDF 文件数据的读取
http://www.cams.cma.gov.cn/cams_973/cheres_docs/cheres_doc_sat.modis.1b.html一. HDF文件格式 1.概述 HDF 是美国国 ...