kgcd ,fmod,fgcd
参考:NENU CS ACM模板made by tiankonguse 2.13 GCD
快速gcd:
位操作没学,真心不懂二进制,还是得学啊
code:
int kgcd(){
if(!a || !b)
return a?a:b;
if(!(a&) && !(b&))
return kgcd(a>>,b>>)<<;
if(!(b&))
return kgcd(a,b>>);
if(!(a&))
return kgcd(a>>,b);
return kgcd(b,a%b);
}
在说fgcd之前先说一下fmod函数吧
fmod:
原型:extern float fmod(float x, float y);
头文件:#include <math.h>
功能:计算x/y的余数
说明:返回x-n*y,使用codeblocks编译符号同x。n=[x/y](向离开零的方向取整)
举例:
int main(){
double x,y;
x=24.238;
y=;
printf("%lf\n",fmod(x,y));
}
运行结果是 4.238
fgcd:(实数的gcd)
模板:
#define eps 1e-8
double fgcd(double a,double b){
if(b > -eps && b < eps){
return a;
}
else{
return fgcd(b,fmod(a,b));
}
举例:
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:
#include <cstdio>
#include <cmath> using namespace std; const double pi=acos(-),eps=1e-; double x[],y[],a,b,c,A,B,C,p,S,R,alpha,S0,n; double fgcd(double a,double b){
if (fabs(b)<eps) return a;
return fgcd(b,fmod(a,b));
} int main(){
for (int i=;i<;++i) scanf("%lf%lf",&x[i],&y[i]);
a=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
b=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
c=sqrt((x[]-x[])*(x[]-x[])+(y[]-y[])*(y[]-y[]));
A=*acos((b*b+c*c-a*a)//b/c);
B=*acos((a*a+c*c-b*b)//a/c);
C=*pi-A-B;
p=(a+b+c)/;
S=sqrt(p*(p-a)*(p-b)*(p-c));
R=a*b*c//S;
alpha=fgcd(fgcd(A,B),C);
n=*pi/alpha;
S0=R*R*sin(alpha)/;
printf("%0.7lf\n",n*S0);
return ;
}
关于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的更多相关文章
- PHP求余函数fmod()
定义和用法 fmod() 函数返回除法的浮点数余数. 语法 fmod(x,y) 参数 描述 x 必需.一个数. y 必需.一个数. 说明 返回被除数(x)除以除数(y)所得的浮点数余数.余数(r)的定 ...
- C语言fmod()函数:对浮点数取模(求余)
头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = ...
- 基于cocos2d-x的Android游戏中使用fmod音频引擎
cocos2d-x的音频引擎是cocosDenshion, 它的Android版比较弱, 只能播放一个背景音乐和些许音效, 如果要实现稍微复杂一点的音频播放, 比如同时播放几个音轨就不能了. 这一点远 ...
- [MetaHook] Quake FMOD function
QFMOD.h #ifndef QFMOD_H #define QFMOD_H #include "fmod.h" extern FMOD_RESULT (F_API *qFMOD ...
- FMOD在Android玩音响系统的抖动问题
1. 基本介绍 在Android升级系统Android4.4之后,发现FMOD在Android音会出现抖动.导致声音不正常.边赫赫有名的"极品飞车"都有问题. 经查验,是FMOD的 ...
- fmod函数和modf函数
最近从博客上看到了一个fmod函数,结果又蹦出来一个modf函数 fmod函数: 头文件:#include<math.h> C库函数... fmod()用来对浮点数进行取模(求余),原型为 ...
- fmod()函数 (对浮点数取模)
头文件:#include <math.h> fmod() 用来对浮点数进行取模(求余),其原型为: double fmod (double x); 设返回值为 ret,那么 x = ...
- Fmod使用总结
1.查询相关文档的地址 http://www.fmod.org/forum/viewtopic.php?f=7&t=15762
- FMOD变声如何捕获并存储处理音效之后的数据
类似AVAudioEngine的功能,一个Engine可以将N个connect连接(串联和并联)在一起,这样来实现多个输入源,多层处理效果的混合输出.实现这个所需功能也是通过这样的方案来实现的.也就是 ...
随机推荐
- CentOS系统中基于Apache+php+mysql的许愿墙网站的搭建
1.首先,我们需要两台虚拟机(CentOS7,Linux文本). 2.给两台虚拟机配置网络环境分别为桥接模式 CentOS7 ip为192.168.100.139.24,linux文本ip为192.1 ...
- 学号20145332 《信息安全系统设计基础》实验五 简单嵌入式WEB服务器实验
实验目的 掌握在 ARM 开发板实现一个简单 WEB 服务器的过程. 学习在 ARM 开发板上的 SOCKET 网络编程. 学习 Linux 下的 signal()函数的使用. 实验内容 学习使用 s ...
- window.print() 打印页面部分内容的方法
用 JavaScript 实现页面数据的打印 : 主要是用到了一个 print() 函数 , 该函数将会打印整个 web 页面 body 内的所有 html 数据 ! 使用方法为 window.pri ...
- Android开发之MVP模式的使用
前几天发现,在Android项目代码里有一个Activity类行数居然有1000多行,而600行左右都是逻辑控制,真正和页面控件处理相关的代码不多,虽然可以用#region <>...#e ...
- head标签详细讲解
head标签详细讲解 head位于html网页的头部,后前的标签,并以开始以结束的一html标签. Head标签位置如图: head标签示意图 head包含标签 meta,title,link,bas ...
- tp框架之分页与第三方类的应用
1.先把分页类放在根目录下,比如放在某个模块下 2.在类里面写入命名空间,注意类名的格式(类名要与里面的方法名一致) 3.在需要的方法里面按照路径进行实例化,然后就可以使用了 方法: public f ...
- Javascript写入txt和读取txt文件的方法
文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Va ...
- Android studio 自定义打包apk名
Android Studio打包应用默认生成的apk名称是:app-release.apk .如果我们要让生成的apk名跟我们版本包名有联系的话,那我们就要自定义生成的apk名了 需要在build.g ...
- 提取postgresql数据库中jsonb列的数据
; SELECT t.errmsg,sms_records.* FROM sms_records, jsonb_to_record(result_json) AS t(errmsg text,sid ...
- java中的多线程
什么是多线程? 首先得知道什么是线程? 线程是一组指令的集合,或者是程序的特殊段,它可以在程序里独立执行.也可以把它理解为代码运行的上下文.所以线程基本上是轻量级的进程,它负责在单个程序里执行多任务. ...