一、最大公约数和最小公倍数问题

题目描述:

输入2个正整数x0,y0(2<=x0<100000,2<=y0<=1000000),求出满足下列条件的P,Q的个数。

条件:1.P,Q是正整数;

2.要求P,Q以x0为最大公约数,以y0为最小公倍数。

试求: 满足条件的所有可能的两个正整数的个数。

输入描述:

每个测试文件包含不超过5组测试数据,每组两个正整数x0和y0(2<=x0<100000,2<=y0<=1000000)。

输出描述:

对于每组输入数据,输出满足条件的所有可能的两个正整数的个数。

下面是对样例数据的说明:

输入3 60

此时的P Q分别为:

3 60

15 12

12 15

60 3

所以,满足条件的所有可能的两个正整数的个数共4种。

#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
if(b==0)
return a;
return gcd(b,a%b);
} int main(){
int x,y;
while(~scanf("%d%d",&x,&y)){
int ans=0;
int mul=x*y;
for(int i=x;i<=y;i++){
if(mul%i!=0)
continue;
int k=mul/i;
if(x==gcd(i,k))
ans++;
}
cout<<ans<<endl;
}
return 0;
}

gcd(欧几里得又称辗转相除)算法

定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD。

gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0)

证明 :a可以表示成a = kb + r(a,b,k,r皆为正整数,且r<b),则r = a mod b

假设d是a,b的一个公约数,记作d|a,d|b,即a和b都可以被d整除。

而r = a - kb,两边同时除以d,r/d=a/d-kb/d=m,由等式右边可知m为整数,因此d|r

因此d也是b,a mod b的公约数

假设d是b,a mod b的公约数, 则d|b,d|(a-k*b),k是一个整数。

进而d|a.因此d也是a,b的公约数

因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证。

以下是gcd算法C++实现代码:

int Gcd(int a, int b)
{
if(b == 0)
return a;
return Gcd(b, a % b);
}

二、筱玛爱地理

点击查看题目描述

  • 这道看似简单的题把好多人都卡死在了分数取模上
  • 赛后题解中涉及到我这个蒟蒻的很多知识盲区orz
  • 先上代码再总结:
#include<bits/stdc++.h>
#define int long long
/*不管32位还是64位的,int都是4个字节,一个字节8位,即32位。
long long 都是8个字节,就是64位,这句话的作用就是将原来的int_32 型 改成int_64型,
在一些预编译里面还会出现 #define _int64 long long的语句,c99标准之后,64位的int都用long long 来表示,这里可以理解为处理标准兼容的问题。 */
#define N 500005
using namespace std;
const int Mod=1e9+7;//科学计数法
struct node{
int x, y;
}a[N];//定义结构体的同时,定义大小为N的结构体数组。
inline bool cmp(node aa,node bb)
{
return aa.y*bb.x>aa.x*bb.y; //避免精度问题所以采用交叉相乘的方式比较大小
}
inline int ksm(int x,int y)//x是底数,y是指数
{//快速求模运算。
int ans1=1;
while (y)
{
if (y&1) //逐位“与”运算,通过和1相与,保留最后一位
{
ans1=1ll*ans1*x;
ans1=ans1%Mod;//ans1记录前面每次翻倍求模结果的乘积再求模
}
/*通过乘以1ll,将等号右边的精度提高到long long ,低精度向高精度转化,避免中间结果溢出范围,右边的ans现在是64位的int,原来32位的int型 10位数字,long long 19位数字, 1e+9是9位数字, 所以是32位还是64位都不会超出范围。 */
y>>=1;//右移1位相当除以2,类比十进数,右移一位相当于除以10,同理左移,是乘以相应的进制基数。
x=1ll*x*x%Mod;//x中记录每次翻倍的求模的结果。
}
return ans1;
}
signed main()
{
int n;
scanf("%lld",&n);
for (int i=1;i<=n;i++)
scanf("%lld%lld",&a[i].x,&a[i].y);//注意结构体的输入方式。
sort(a+1,a+n+1,cmp);//i=1开始,所以起始位置为a+1
for (int i=1;i<=n;i++)
printf("%lld\n",a[i].y*ksm(a[i].x,Mod-2)%Mod);//分数求模的定理转换。
return 0;
}

(一)inline关键字

1.在 c/c++ 中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了 inline 修饰符,表示为内联函数。

栈空间就是指放置程序的局部数据(也就是函数内数据)的内存空间。

在系统下,栈空间是有限的,假如频繁大量的使用就会造成因栈空间不足而导致程序出错的问题,如,函数的死循环递归调用的最终结果就是导致栈内存空间枯竭。

2.inline 的使用是有所限制的,inline 只适合涵数体内代码简单的函数使用,不能包含复杂的结构控制语句例如 while、switch,并且不能内联函数本身不能是直接递归函数(即,自己内部还调用自己的函数)。

3.inline 函数仅仅是一个对编译器的建议,所以最后能否真正内联,看编译器的意思,它如果认为函数不复杂,能在调用点展开,就会真正内联,并不是说声明了内联就会内联,声明内联只是一个建议而已。

慎用inline!!!

内联是以代码膨胀(复制) 为代价,仅仅省去了函数调用的开销,从而提高函数的执行效率。

如果执行函数体内代码的时间,相比于函数调用的开销较大,那么效率的收获会很少。另一方面,每一处内联函数的调用都要复制代码,将使程序的总代码量增大,消耗更多的内存空间。

(二)求模运算

  • 费马小定理:对于质数p,任意整数a,均满足:$$a^p\equiv a(mod p)$$
  • 以下推导出分数求模
    • \[a^{p-1}modp\equiv1modp
      \]

    • \[a^{p-2}*amodp\equiv1modp
      \]

    • \[a^{p-2}modp\equiv\dfrac{1}{a}modp
      \]

    • \[a^{-n}modp\equiv a^{p-n-1}modp
      \]

  • 题中要求\(\beta =V/E\)中\(\beta\)的模,即可转化为:$$\beta mod p=V*\dfrac{1}{e}modp$$ (其中p=1e10+7)
  • 模运算具有以下性质:
    • \[(A+B)modp=(Amodp+Bmodp)modp
      \]

    • \[(A*B)modp=((Amodp)*(Bmodp))modp$$</p>

      \]

    (因为V<p所以mod后不变)

(三)按位与运算

  • 判断奇偶一般我用的是取余运算,今天学到还可以按位与判断奇偶
  • 按位与的优点:效率更高,时间更快
  • 原理:
    • 按位与是将两个数转化为二进制,若对应的位两数都为1,则结果中该位为1,否则该位为0
    • 一个数如果与1进行按位与运算,奇数转化为二进制后最后一位肯定为1,偶数肯定为0
if((x&1)==1)
printf("奇数");
else if((x&1)==0)
printf("偶数");

牛客竞赛(gcd,快速幂)的更多相关文章

  1. 2017 ECJTU ACM程序设计竞赛 矩阵快速幂+二分

    矩阵 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission ...

  2. 2020牛客竞赛 DP F 碎碎念

    作者:儒生雄才1链接:https://ac.nowcoder.com/discuss/366644来源:牛客网 题目连接:https://ac.nowcoder.com/acm/contest/300 ...

  3. 牛客竞赛&&mjt的毒瘤赛

    题目链接 https://ac.nowcoder.com/acm/contest/368/F 思路 询问可以离线. 然后每个节点上建32个权值线段树(权值不大,其实只要20颗) 记录每一位权值为x(如 ...

  4. 牛客竞赛-Who killed Cock Robin

    Who killed Cock Robin? I, said the Sparrow, With my bow and arrow,I killed Cock Robin. Who saw him d ...

  5. 2019牛客竞赛第六场D Move 宏观单调,部分不单调

    Move 题意 有k个体积相同的箱子,有个憨憨有固定的装箱策略,每次都只装可以装的重量中最大的东西,求箱子的最小提及 分析 看起来可以二分,但由于他的装箱策略有点蠢,所以只在宏观上满足单调性,在特别小 ...

  6. 牛客竞赛第二场D Kth Minimum Clique 贪心+bitmap

    Kth Minimum Clique 题意 给出n(n<100)个点的邻接表,和n个点的权值,求第k大的团(完全子图) 分析 n很小,并且好像没有什么算法和这个有关系,所以可以往暴力枚举的方向想 ...

  7. 牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)

    链接:https://ac.nowcoder.com/acm/contest/548/B来源:牛客网 题目描述 立华奏在学习初中数学的时候遇到了这样一道大水题: “设箱子内有 n 个球,其中给 m 个 ...

  8. 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘

    链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

  9. 牛客网 牛客小白月赛1 I.あなたの蛙が帰っています-卡特兰数,组合数阶乘逆元快速幂

    I.あなたの蛙が帰っています   链接:https://www.nowcoder.com/acm/contest/85/I来源:牛客网     这个题有点意思,是卡特兰数,自行百度就可以.卡特兰数用处 ...

随机推荐

  1. 开发中少不了的Fun -- 前端本地存储

    存储sessionStorage function setSessionStore (name, content) { if (!name) return if (typeof content !== ...

  2. Activiti服务类- IdentityService服务类

    转自:https://www.cnblogs.com/liuqing576598117/p/9815013.html 一.内置用户组(角色)设计表概念 用户和组(或者叫做角色),多对多关联,通过关联表 ...

  3. MySQL5.7.6 general tablespace

    摘要: 从5.7.6开始,增加了一种新的 tablespace模式(成为general tablespace),实际上它和共享表空间比较类似:创建一个单独的ibd,ibd中包含多个表,兼容不同的格式. ...

  4. 046_Shell 脚本的 fork 炸弹

    #!/bin/bash#快速消耗计算机资源,致使计算机死机#定义函数名为.(点), 函数中递归调用自己并放入后台执行.() {.|.& };.

  5. 五十六. playbook基础 、 playbook进阶

    1.playbook练习 安装Apache并修改监听端口为8080 修改ServerName配置,执行apachectl -t命令不报错 设置默认主页hello world 启动服务并设开机自启   ...

  6. 转载:appium踩过的坑

    原文地址:http://blog.csdn.net/wirelessqa/article/details/29188665 自己的操作:由于在window上安装appium时,报各种错误:所以选择在u ...

  7. 【概率论】3-3:累积分布函数(Cumulative Distribution Function)

    title: [概率论]3-3:累积分布函数(Cumulative Distribution Function) categories: Mathematic Probability keywords ...

  8. 【线性代数】6-5:正定矩阵(Positive Definite Matrices)

    title: [线性代数]6-5:正定矩阵(Positive Definite Matrices) categories: Mathematic Linear Algebra keywords: Po ...

  9. 关于Sign in with Apple 后台验证的一些记录

    2019年10月9号  IOS端新增Sign in with Apple IOS真是世界上最垃圾的语言,没有之一,苹果是世界上最垃圾的公司,没有之一 关于Sign in with Apple 苹果官方 ...

  10. python中的tcp示例详解

    python中的tcp示例详解  目录 TCP简介 TCP介绍 TCP特点 TCP与UDP的不同点 udp通信模型 tcp客户端 tcp服务器 tcp注意点   TCP简介   TCP介绍 TCP协议 ...