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 分类:有源有汇 ...
随机推荐
- [ios]关于用FMDB 操作数据库 删除 tableView 后刷新
刚了解使用fmdb,从数据库获取数据 绑定到一个可变数组classNameItems //从ClassList表取得数据 FMResultSet *classInfo=[db executeQuery ...
- linux配置ftp高级权限
建一个用于管理的ftp高级账号,ftproot,定义它的目录,也就是我们存放项目的地址,所属组www, useradd -d /home/www -g www ftproot www里存放很多项目,我 ...
- [收藏]C++简单五子棋
#include<iostream> #include<iomanip> using namespace std; ; //棋盘行数 ; //棋盘列数 char p[X][Y] ...
- spring mvc + ehcache 利用注解实现缓存功能
我的spring是3.1的,因为项目需求,需要在查询时候加上缓存,小白一个,完全没有用过缓存(ehcache),摸索了一天终于会了一点通过注解来使用ehcache进行缓存,立刻给记录下来. 首先 我的 ...
- 串口计时工具Grabserial简介及修改(添加输入功能)
Grabserial是Tim Bird用python写的一个抓取串口的工具,这个工具能够为收到的每一行信息添加上时间戳. 如果想对启动时间进行优化的话,使用这个工具就可以简单地从串口输出分析出耗时. ...
- ntfs-3g
CentOS默认源里没有ntfs3g,想要添加ntfs支持,无非是自己下载编译安装或者加源yum安装. 昨天重新安装了一个CentOS7,用的是添加aliyun的epel源来yum安装的方式,简单易行 ...
- html5 炫酷的字幕雨
<!DOCTYPE html> <html> <head> <script src="http://tj.gamee456.com/jquery.1 ...
- Ubantu 下安装 tensorflow
# 在 Linux 上: $ sudo apt-get install python-pip python-dev python-virtualenv $ virtualenv --system-si ...
- Thrift-0.9.2编译安装
确定安装好了boost1.54以上 确定libevent版本大于1.0 只编译生成cpp库 ./configure --without-java --without-lua --without-pyt ...
- CodeFirst实战:用文本数据库存档软件配置
背景: 以前要写软件的时候,在编写用户配置这一块时,由于存档数据库不靠谱或大题小作,所以一般是存在文本中. 一开始是一个文件保存一个配置(图个File.Read与File.Write的操作简单) 由于 ...