ZOJ Problem Set - 1337 Pi 最大公约数
这道题目的关键在于怎么求两个整数的最大公约数,这里正好复习一下以前的知识,如下:
1.设整数a和b
2.如果a和b都为0,则二者的最大公约数不存在
3.如果a或b等于0,则二者的最大公约数为非0的一个
4.如果b不为0,则使得a=a,b=a%b,转到2重复执行
实现的递归代码如下:
int gcb(int a,int b)
{
if(b==)
return a;
else
return gcb(b,a%b);
}
注:这个算法的证明这里简单说明下:
1.设g为a和b的公约数
2.则存在m和k使得 a=g*m b=g*k
3.同时利用b可表示a a=b*l+r (其中r为余数)
4.合并2、3中的两个式子得出 r=g*(m-l*k) (g!=0)
5.可看出a和b的公约数同时也是b和a%b(取余)的公约数
6.利用反证法我们可以得出结论:如果g是a和b的最大公约数则它也是b和a%b的最大公约数
这样就有了如上算法
这道题目的核心就是这些同时注意运用一些常识:
1.两个偶数不可能互质
2.两个差为1的整数一定互质
见ac代码:
#include <stdio.h>
#include <math.h> int c(int n)
{
return n*(n-)/;
} int gcb(int a,int b)
{
if(b==)
return a;
else
return gcb(b,a%b);
} int myabs(int a)
{
return a<?-a:a;
} int main()
{
int n,num[];
while(scanf("%d",&n)!=EOF&&n)
{
int i,j;
for(i=;i<n;i++)
scanf("%d",&num[i]);
double pairs=double(c(n)); double ncf=;
for(i=;i<n;i++)
{
for(j=i+;j<n;j++)
{
if(num[i]%==&&num[j]%==)
continue;
else if(myabs(num[i]-num[j])==)
{
ncf++;
continue;
}
else
{
if(gcb(num[i],num[j])==)
ncf++;
}
}
} if(ncf==)
printf("No estimate for this data set.\n");
else
printf("%.6lf\n",sqrt(/ncf*pairs));
} return ;
}
ZOJ Problem Set - 1337 Pi 最大公约数的更多相关文章
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
- ZOJ Problem Set - 1090——The Circumference of the Circle
ZOJ Problem Set - 1090 The Circumference of the Circle Time Limit: 2 Seconds Memory Limit: 65 ...
- ZOJ Problem Set - 1025解题报告
ZOJ Problem Set - 1025 题目分类:基础题 原题地址:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=10 ...
- ZOJ Problem Set - 3829Known Notation(贪心)
ZOJ Problem Set - 3829Known Notation(贪心) 题目链接 题目大意:给你一个后缀表达式(仅仅有数字和符号),可是这个后缀表达式的空格不幸丢失,如今给你一个这种后缀表达 ...
- ZOJ Problem Set - 2563 Long Dominoes 【如压力dp】
称号:ZOJ Problem Set - 2563 Long Dominoes 题意:给出1*3的小矩形.求覆盖m*n的矩阵的最多的不同的方法数? 分析:有一道题目是1 * 2的.比較火.链接:这里 ...
- ZOJ Problem Set - 3593 拓展欧几里得 数学
ZOJ Problem Set - 3593 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3593 One Person ...
- ZOJ Problem Set - 2297 Survival 【状压dp】
题目:ZOJ Problem Set - 2297 Survival 题意:给出一些怪,有两个值,打他花费的血和能够添加的血,然后有一个boss,必须把小怪全部都打死之后才干打boss,血量小于0会死 ...
- ZOJ Problem Set - 3820 Building Fire Stations 【树的直径 + 操作 】
题目:problemId=5374" target="_blank">ZOJ Problem Set - 3820 Building Fire Stations 题 ...
- ZOJ Problem Set - 3229 Shoot the Bullet 【有上下界网络流+流量输出】
题目:problemId=3442" target="_blank">ZOJ Problem Set - 3229 Shoot the Bullet 分类:有源有汇 ...
随机推荐
- HTML5可视化编辑与微数据
1.HTML 5 全局 contenteditable 属性 contenteditable 属性规定是否可编辑元素的内容. <p contenteditable="true" ...
- 我的emacs配置
我的emacs配置文件 ;; .emacs ;; ============================== Basic Configure START ====================== ...
- gem安装报错解决方法
gem install rdiscount -- --use-system-libraries
- Ubuntu Server无线连接配置
由于Ubuntu Linux内核对于WPA的加密方式支持不是很好,所有使用普通方式的命令行无法连接WPA2类型的路由.首先检查是否安装了wpasupplicant,Ubuntu 10.04已经安装了 ...
- radio相关
radio 按钮组, name=”sex”. <input type="radio" name="sex" value="Male"& ...
- Your awesome titleHH
Welcome to Jekyll! Your awesome titleHH About Blogging Like a Hacker Welcome to Jekyll! Jan 9, 2016 ...
- 玩转SQL Server复制回路の变更数据类型、未分区表转为分区表
玩转SQL Server复制回路の变更数据类型.未分区表转为分区表 复制的应用: 初级应用:读写分离.数据库备份 高级应用:搬迁大型数据库(跨机房).变更数据类型.未分区表转为分区表 京东的复制专家 ...
- Python黑帽编程2.1 Python编程哲学
Python黑帽编程2.1 Python编程哲学 本节的内容有些趣味性,涉及到很多人为什么会选择Python,为什么会喜欢这门语言.我带大家膜拜下Python作者的Python之禅,然后再来了解下P ...
- chunkupload 文件上传断点续传组件(java) - 正式发布
chunkupload简介 chunkupload是一款基于java语言的断点续传组件,针对文件上传,非文件下载,集成方便,使用简单. chunkupload实现如下功能: · 实现断点续传 · ...
- ASP.NET Web API路由系统:路由系统的几个核心类型
虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集System.Web.Http.dll中)已经移除 ...