十二届 - CSU 1803 :2016(同余定理)
题目地址:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1803
Knowledge Point:
同余定理:两个整数a、b,若它们除以整数m所得的余数相等,则称a与b对模m同余或a同余于b模m。记作 a≡b(mod m);
加法运用: (a + b) % m = (a % m + b % m) % m
乘法运用: (a * b) % m = ((a % m) * (b % m)) % m
高精度取模: 一个高精度数对一个数取余,可以把高精度数看成各位数的权值与个位数乘积的和。
eg: 1234 = ((1*10+2) *10+3) *10+4, 综合运用上面的加法和乘法运用公式求解;
1 string a = "1234"; 2 int ans = 0; 3 for(int i = 0; i < a.length; i++){ 4 ans = (ans * 10 + a[i] - '0') % mod; 5 } 6 cout << ans << endl;
快速幂取模: 将幂拆解为多个底数的平方次的积,如果指数为偶数,把指数除以2,并让底数的平方次取余,如果指数为奇数,就把多出来的底数记录下来,再执行偶数次的操作。
1 int PowerMod(int a, int b, int mod){ 2 int ans = 1; //a-底数,b-质数 3 a = a % mod; 4 while(b > 0){ 5 if(b&1){ 6 ans *= (a % mod); 7 } 8 b >>= 1; 9 a = (a * a) % mod; 10 } 11 ans %= mod; 12 return ans; 13 }
Summarize:
1. 同余定理运用;
2. 数据范围爆 int,使用 long long;
3. 如果 (i*j)%mod==0 则有 (i*j+mod)%mod==0 ;
一开始我选择求2016的所有因数,循环将 n 和 m 中因数的倍数个数相乘再将所有结果相加。但可能出现某一个数 x 同时是多个因数的公倍数,且
2016/x 恰好也是多个因数的公倍数,出现重复,故该方法不能通过。
附代码:
1 /* 2 题目地址:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1803 3 4 2016 5 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 6 1. 1≤a≤n,1≤b≤m; 7 2. a×b 是 2016 的倍数。 8 输入每组数据包含两个整数 n,m (1≤n,m≤10e9). 9 10 Sample Input 11 32 63 12 2016 2016 13 1000000000 1000000000 14 15 Sample Output 16 1 17 30576 18 7523146895502644 19 */ 20 #include<iostream> 21 #include<cstring> 22 #include<algorithm> 23 #include<vector> 24 #include<queue> 25 #include<cmath> 26 using namespace std; 27 28 #define LL long long 29 const int N = 2016; 30 LL n,m,ans; 31 LL a[N], b[N]; 32 33 int main() 34 { 35 ios::sync_with_stdio(false); 36 37 while(cin>>n>>m) 38 { 39 ans=0; 40 for(int i=0; i<N; i++) 41 { a[i]=n/N; b[i]=m/N;} 42 for(int i=1; i<=n%N; i++) a[i]++; 43 for(int i=1; i<=m%N; i++) b[i]++; 44 45 for(int i=0; i<N; i++) 46 for(int j=0; j<N; j++) 47 if(i*j%N == 0) 48 ans += a[i]*b[j]; 49 cout<<ans<<endl; 50 } 51 52 return 0; 53 }
转载于:https://www.cnblogs.com/liubilan/p/9384032.html
十二届 - CSU 1803 :2016(同余定理)相关推荐
- CSU 1803: 2016
CSU 1803: 2016 水题 Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数 ...
- CSU 1803 2016(数论)
2016 Problem Description: 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1≤a≤n,1≤b≤m; a×b 是 2016 的倍数. Input: 输 ...
- CSU 1803 2016 (数学)【2016年湖南省第十二届大学生计算机程序设计竞赛 - A】
题目点我点我点我 湖南省第十二届大学生计算机程序设计竞赛 1803: 2016 Time Limit: 5 Sec Memory Limit: 128 MB Submit: 289 Solve ...
- CSU 1803 2016
a,b可以表示成a=x*2016+i b=y*2016+j; a*b=x*y*2016^2+x*2016*j+y*2016*i+i*j; 其中除了i*j这一项,其他的项都是2016的倍数; 事先建立 ...
- 2016年湖南省第十二届大学生计算机程序设计竞赛(重现)
A(1803):2016 Submit Page Summary Time Limit: 5 Sec Memory Limit: 128 Mb Submitted: 245 ...
- 2020高交会第二十二届中国国际高新技术成果交易会
2020高交会第二十二届中国国际高新技术成果交易会 第二十二届中国国际高新技术成果交易会 信息技术与产品展 2020年11月11-15日 深圳会展中心1展馆 国家级科技盛宴 国际化.专业化.便利化.高 ...
- 从1到N,第十二届中国IDC产业年度大典在京启幕
此次大会,IBM.微软.华为.腾讯云.世纪互联.京东云等十余家企业高层就IDC产业发展现状与趋势展开了深入讨论. 12月21日主论坛现场 2017年12月20日-22日,由中国IDC产业年度大典组委会 ...
- 从1到N 第十二届中国IDC产业年度大典在京启幕
12月21日主论坛现场 2017年12月20日-22日,由中国IDC产业年度大典组委会主办,中国IDC圈.CloudBest承办的第十二届中国IDC产业年度大典在北京国家会议中心盛大召开.来自IBM. ...
- 大咖云集,从1到N,第十二届中国IDC产业年度大典集锦
12月21日主论坛现场 2017年12月20日-22日,由中国IDC产业年度大典组委会主办,中国IDC圈.CloudBest承办的第十二届中国IDC产业年度大典在北京国家会议中心盛大召开.来自IBM. ...
最新文章
- 2015.11.3 RichBox改变若干文本颜色
- VS2005中重构的用法
- 正则表达式处理的基本步骤
- UltraEdit不高亮解决办法
- 服务器销售税率,转销售云服务器税率
- uoj22 外星人(dp)
- 基于蒙特卡罗模拟的金融风险评估-函数调用关系图
- 类的构造器-init和new
- Java注解全面解析
- 299.	Bulls and Cows
- ROS学习笔记5(理解ROS节点)
- 笔记本无线网通过网线共享给其他主机
- 03_java基础(四)之方法的创建与调用
- Adobe AIR简单的缓存技术
- 《和平精英》:新军需山经魅狐、滑板小狐今日正式上线,很帅气!
- HTML与CSS如何创建悬停折角纸叠效果
- 2021年江苏省高考数据统计:江苏省普通类报名人数30.9万人,本土167所高校(2所985大学)
- 大比分领先!ACCV 2022 国际细粒度图像分析挑战赛冠军方案
- React18降版本操作
- Tecplot中自定义函数
热门文章
- 计算机精英协会考核题 —— 第二题:蛇形填数
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1105:数组逆序重存放
- 如何将本地项目上传至GitHub
- SLAM 学习与开发经验分享
- 【数字图像】数字图像处理博客汇总
- 【Protocol Buffer】Protocol Buffer入门教程(五):repeated限定修饰符
- 优优加速cdn带宽_为什么使用CDN你的网速还是那么慢?
- TCP/IP学习笔记(七)四次挥手
- 1013 数素数 (20 分)(c语言)
- 给未来的自己一封信计算机,给未来的自己一封信