CSU 1803 2016倍数

#include <iostream>
#include <vector>
#include <cstring>
#include <queue>
#include <cmath>
#include <cstdio>
using namespace std;
typedef long long ll;
const int N=3e3+20;
const int inf=2e8;
//题意:给出n,m<=1e9,问有多少对(a,b) a<=n,b<=m 满足a*b为2016倍数
//a=2016p+r1,b=2016q+r2  ->   a*b=2016^2*p*q+2016(pr2+qr1)+r1r2. 则a*b为2016倍数等价于r1r2为2016倍数
//r[i]为n以内余2016为i的数个数,枚举余数即可
ll n,m;
ll r1[N],r2[N];
int main()
{
    while(cin>>n>>m)
    {
        memset(r1,0,sizeof(r1));
        memset(r2,0,sizeof(r2));
        ll x=n/2016,y=m/2016;//余数有多少组

        ll p1=n%2016,p2=m%2016;
        for(int i=0;i<2016;i++)
            r1[i]+=x,r2[i]+=y;
        for(int i=1;i<=p1;i++)
            r1[i]++;
        for(int i=1;i<=p2;i++)
            r2[i]++;
        ll ans=0;
        for(int i=0;i<2016;i++)
        {
             for(int j=0;j<2016;j++)
             {
                 if((i*j)%2016==0)
                     ans+=r1[i]*r2[j];
            }
         }
         cout<<ans<<endl;
    }
    return 0;
} 
时间: 2024-07-28 13:41:28

CSU 1803 2016倍数的相关文章

【模拟】【数学】CSU 1803 2016 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 题目大意: 给定n,m(n,m<=109)1<=i<=n,1<=j<=m,求i*j%2016=0的方案数. 题目思路: [模拟][数学] 按照%2016的余数分类.每增加一个2016就又多一种方案.统计是2016的几倍,根据余数分类.最后枚举i,j的余数即可求解. 1 // 2 //by coolxxx 3 //#include<bits/stdc++

CSU 1803 2016(同余公式)2016年湖南省第十二届大学生计算机程序设计竞赛

题意给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量:1. 1 ≤ a ≤ n, 1 ≤ b ≤ m;2. a×b 是 2016 的倍数. 样例输入32 632016 20161000000000 1000000000 样例输出1305767523146895502644 思路由同余公式可得a * b % 2016 = (a % 2016) * (b % 2016) % 2016所以如果 x*y 是2016的倍数的话,那么(2016*k + x)*y也是那么只需要统计1-n

【CSU 1803】2016

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1803 Solution: 考虑两个数x,y乘积%2016=0 x×y≡0(MOD 2016) x=p1×2016+q1 y=p2×2016+q2 x×y=(p1×2016+q1)×(p2×2016+q2)=2016^2×p1p2+2016(p1q2+q1p2)+p1p2≡0(MOD 2016) 实际上就转化为余数乘积取模=0,预处理没两个余数乘积是否mod2016=0 统计答案两个余数出现的个数

湖南省第十二届大学生计算机程序设计竞赛 A 2016

1803: 2016 Description 给出正整数 n 和 m,统计满足以下条件的正整数对 (a,b) 的数量: 1. 1≤a≤n,1≤b≤m; 2. a×b 是 2016 的倍数. Input 输入包含不超过 30 组数据. 每组数据包含两个整数 n,m (1≤n,m≤109). Output 对于每组数据,输出一个整数表示满足条件的数量. Sample Input 32 63 2016 2016 1000000000 1000000000 Sample Output 1 30576 7

聊一聊前端模板与渲染那些事儿

欢迎大家收看聊一聊系列,这一套系列文章,可以帮助前端工程师们了解前端的方方面面(不仅仅是代码): https://segmentfault.com/blog/frontenddriver 作为现代应用,ajax的大量使用,使得前端工程师们日常的开发少不了拼装模板,渲染模板.我们今天就来聊聊,拼装与渲染模板的那些事儿. 如果喜欢本文请点击右侧的推荐哦,你的推荐会变为我继续更文的动力 1 页面级的渲染 在刚有web的时候,前端与后端的交互,非常直白,浏览器端发出URL,后端返回一张拼好了的HTML串

使用 Raspberry Pi 上的传感器在 Node.js 中创建一个 IoT Bluemix 应用程序

先决条件 一个IBM Bluemix 帐号,一个 Raspberry Pi 2 或 3,一个 PIR 运动传感器 适用于本文的 Github 存储库 如果您是一位精明的 Bluemix 开发人员,您可能只想看看如何在 node.js 中与 IoT 建立连接,或者只想了解如何从此 github 存储库中拉取我的代码. git clone https://github.com/nicolefinnie/iot-nodejs-tutorial 以下是实现与 IBM IoT 平台连接在一起的 4 个 R

【数学】CSU 1810 Reverse (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1810 题目大意: 一个长度为N的十进制数,R(i,j)表示将第i位到第j位翻转过来后的数字,求mod 109+7 题目思路: [数学] 这题换一种思路,看每个数字能够对答案的贡献情况.(可以手推01,10,001,010,100.....,也可以像我一样写个暴力打个10以内的表看看规律) 现在先考虑位置为i的数字为1的情况(最后乘上这个数字就行).可以发现贡献是对称的(第i位的1和第

【拓扑】【宽搜】CSU 1084 有向无环图 (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 题目大意: 一个有向无环图(DAG),有N个点M条有向边(N,M<=105),每个点有两个值ai,bi(ai,bi<=109),count(i,j)表示从i走到j的方案数. 求mod 109+7的值. 题目思路: [拓扑][宽搜] 首先将式子拆开,每个点I走到点J的d[j]一次就加上一次ai,这样一个点被i走到的几次就加上几次ai,相当于count(i,j)*ai,最终只要求

【模拟】CSU 1807 最长上升子序列~ (2016湖南省第十二届大学生计算机程序设计竞赛)

题目链接: http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1807 题目大意: 给你一个长度为N(N<=105)的数列,数列中的0可以被其他数字替换,最终形成一个1~N的排列,求这个排列的最长上升子序列长度为N-1的方案数. 题目思路: [模拟] 这道题需要分类讨论. 首先可以肯定,一个长度为n的序列最长上升子序列长度为n-1(最长下降子序列长度为2),那么这个序列的样子是1~n从小到大排列后其中一个数字挪到其余数字中间(错位) 一个长度为L的