参考:NENU CS ACM模板made by tiankonguse  2.13 GCD

快速gcd:

位操作没学,真心不懂二进制,还是得学啊

code:

  1. int kgcd(){
  2. if(!a || !b)
  3. return a?a:b;
  4. if(!(a&) && !(b&))
  5. return kgcd(a>>,b>>)<<;
  6. if(!(b&))
  7. return kgcd(a,b>>);
  8. if(!(a&))
  9. return kgcd(a>>,b);
  10. return kgcd(b,a%b);
  11. }

在说fgcd之前先说一下fmod函数吧

fmod:

  1. 原型:extern float fmod(float x, float y);
  2. 头文件:#include <math.h>
  3. 功能:计算x/y的余数
  4. 说明:返回x-n*y,使用codeblocks编译符号同xn=[x/y](向离开零的方向取整)
  5. 举例:
  1. int main(){
  2. double x,y;
  3. x=24.238;
  4. y=;
  5. printf("%lf\n",fmod(x,y));
  6. }
  1. 运行结果是 4.238
这个函数还可以取得某个数的小数点后的部分。如:
fload f = 1.234;
fmod(f,(int)f)即可得到小数点后的部分
 
 

fgcd:(实数的gcd)

模板:

  1. #define eps 1e-8
  2. double fgcd(double a,double b){
  3. if(b > -eps && b < eps){
  4. return a;
  5. }
  6. else{
  7. return fgcd(b,fmod(a,b));
  8. }

举例:

Apr 30,2014 codeforces

C. Ancient Berland Circus

题目大意:给出3个点,求最小面积的正多边形,使得这3个点为正多边形的顶点。

算法分析:

根据正多边形的性质,正多边形的每个顶点都在其外接圆上。

已知3个点,可以根据海伦公式求出三角形的面积S。然后根据正弦定理求出外接圆的半径R=abc/(4S),根据余弦定理求出三个圆心角。

求出三个圆心角的最大公约数A,则正多边形由2*pi/A个小三角形组成。

根据正弦定理求出每个小三角形的面积S0,则答案即为S0*2*pi/A。

Code:

  1. #include <cstdio>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. const double pi=acos(-),eps=1e-;
  7.  
  8. double x[],y[],a,b,c,A,B,C,p,S,R,alpha,S0,n;
  9.  
  10. double fgcd(double a,double b){
  11. if (fabs(b)<eps) return a;
  12. return fgcd(b,fmod(a,b));
  13. }
  14.  
  15. int main(){
  16. for (int i=;i<;++i) scanf("%lf%lf",&x[i],&y[i]);
  17. a=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
  18. b=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
  19. c=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
  20. A=*acos((b*b+c*c-a*a)//b/c);
  21. B=*acos((a*a+c*c-b*b)//a/c);
  22. C=*pi-A-B;
  23. p=(a+b+c)/;
  24. S=sqrt(p*(p-a)*(p-b)*(p-c));
  25. R=a*b*c//S;
  26. alpha=fgcd(fgcd(A,B),C);
  27. n=*pi/alpha;
  28. S0=R*R*sin(alpha)/;
  29. printf("%0.7lf\n",n*S0);
  30. return ;
  31. }

关于GCD的一些结论

1.有两个数p,q,gcd(p,q) = 1,则最大无法表示成px+qy(x >= 0 ,y >= 0)的数是pq-q-p.

2.区间内与n的gcd不小于m的数

输入m,n,求1-n之间中gcd(x,n) >= m 的x的个数。

找出N的所有大于等于M的因子(x1,x2,x3......xi),然后设k = N/xi.

下面只需找出小于k且与k互质的数。

因为:设y小于k且与k互质,那么gcd(y*xi,k*xi) = xi,(xi为k的因子,且xi大于等于M)。

 

kgcd ,fmod,fgcd的更多相关文章

  1. PHP求余函数fmod()

    定义和用法 fmod() 函数返回除法的浮点数余数. 语法 fmod(x,y) 参数 描述 x 必需.一个数. y 必需.一个数. 说明 返回被除数(x)除以除数(y)所得的浮点数余数.余数(r)的定 ...

  2. C语言fmod()函数:对浮点数取模(求余)

    头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为:    double fmod (double x); 设返回值为 ret,那么 x = ...

  3. 基于cocos2d-x的Android游戏中使用fmod音频引擎

    cocos2d-x的音频引擎是cocosDenshion, 它的Android版比较弱, 只能播放一个背景音乐和些许音效, 如果要实现稍微复杂一点的音频播放, 比如同时播放几个音轨就不能了. 这一点远 ...

  4. [MetaHook] Quake FMOD function

    QFMOD.h #ifndef QFMOD_H #define QFMOD_H #include "fmod.h" extern FMOD_RESULT (F_API *qFMOD ...

  5. FMOD在Android玩音响系统的抖动问题

    1. 基本介绍 在Android升级系统Android4.4之后,发现FMOD在Android音会出现抖动.导致声音不正常.边赫赫有名的"极品飞车"都有问题. 经查验,是FMOD的 ...

  6. fmod函数和modf函数

    最近从博客上看到了一个fmod函数,结果又蹦出来一个modf函数 fmod函数: 头文件:#include<math.h> C库函数... fmod()用来对浮点数进行取模(求余),原型为 ...

  7. fmod()函数 (对浮点数取模)

    头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为:    double fmod (double x); 设返回值为 ret,那么 x = ...

  8. Fmod使用总结

    1.查询相关文档的地址 http://www.fmod.org/forum/viewtopic.php?f=7&t=15762

  9. FMOD变声如何捕获并存储处理音效之后的数据

    类似AVAudioEngine的功能,一个Engine可以将N个connect连接(串联和并联)在一起,这样来实现多个输入源,多层处理效果的混合输出.实现这个所需功能也是通过这样的方案来实现的.也就是 ...

随机推荐

  1. phpstudy 80端口被占用,修改端口

    搭建mantis,总会出现80端口被占用的情况.看到别的步骤是:1.cmd 运行netstat -ano查看80端口被什么占用,然后在任务管理器找到对应的结束进程.通常情况下是被System占用,右击 ...

  2. selenium 下载百度音乐并验证

    package baidu; import java.io.File; import java.io.IOException; import java.util.List; import org.ap ...

  3. appium for hybrid app 处理webview

    之前研究了一段时间的appium for native app 相应的总结如下:                                            appium测试环境搭建 :ht ...

  4. web.config数据库连接字符串

    我们在做VB数据库经典实例这本书上的五个小例子和做学生信息管理系统时,都需要通过Vb链接数据库,在众多的链接方式中connectionstring字符串应该是较为简单的一种方式,下面我来详细介绍它的一 ...

  5. Qt在ui中使用代码添加新的控件

    QLabel* label = new QLabel(ui->centralWidget);

  6. EXCEL 对比数据是否重复

    1.同一列 后一行对比前面所有行 查找是否重复 =IF(COUNTIF(B$2:B2,B2)>1,"重复","") 2.两行两列(多行多列) 两行两列 = ...

  7. Ext.js细节:在MVC中处理Widget Column,GetCmp和ComponentQuery, Id和ItemId

    针对EXT.JS版本的演进,要不断的学习新的最佳实践方法. 比如,在定义组件时,尽管用itemid,而不是id. 在搜索组件时,尽量用ComponentQuery,而不是getCmp. 在MVC中处理 ...

  8. 剑指Offer-【面试题04:替换空格】

    package com.cxz.question4; /* * 请实现一个函数,把字符串中的每个空格替换成"%20",例如"We are happy.",则输出 ...

  9. 用WinForm写的员工考勤项目!!!!!!

    先说几句,作为一个还在学习的程序员,掌握的知识有限:但我利用自身所学,给一些像我一样还在学习的码农提供我的绵薄之力! 写的不好,但是尽力了,希望大牛指点.多多吐槽!!! 好了开始说项目需求: 实现新增 ...

  10. 前端弹出层框架layer

    http://www.layui.com/doc/modules/layer.html#layer.confirm