当前位置: 首页 > news >正文

UVa 412 Pi

题目描述

题目基于数论中的一个定理:从一个大集合中随机选取两个正整数,它们互质(最大公约数为111)的概率为6/π26 / \pi^26/π2。给定一个包含NNN个正整数的集合,计算其中所有无序对中互质对的比例,利用上述公式反推出π\piπ的估计值。

输入格式

输入包含多组数据。每组数据格式如下:

  • 第一行一个正整数NNN1<N<501 < N < 501<N<50),表示集合中整数的个数。
  • 接下来NNN行,每行一个正整数(大于000且小于327683276832768)。
  • N=0N = 0N=0表示输入结束。

输出格式

对于每组数据:

  • 如果存在至少一对互质的数,则输出π\piπ的估计值,保留666位小数。
  • 如果没有互质的数对,则输出No estimate for this data set.

样例

输入

5 2 3 4 5 6 2 13 39 0

输出

3.162278 No estimate for this data set.

题目分析

本题的核心是计算给定集合中所有无序对的最大公约数,统计互质对的数量,然后利用概率公式反推π\piπ

公式推导

设总共有NNN个数,则无序对的总数为:
totalPairs=(N2)=N(N−1)2 \textit{totalPairs} = \binom{N}{2} = \frac{N(N-1)}{2}totalPairs=(2N)=2N(N1)

设互质对的数量为coprimePairs\textit{coprimePairs}coprimePairs,则互质对的比例为:
coprimePairstotalPairs \frac{\textit{coprimePairs}}{\textit{totalPairs}}totalPairscoprimePairs

根据定理,该比例应等于6/π26 / \pi^26/π2,因此:
6π2≈coprimePairstotalPairs \frac{6}{\pi^2} \approx \frac{\textit{coprimePairs}}{\textit{totalPairs}}π26totalPairscoprimePairs
π2≈6×totalPairscoprimePairs=3N(N−1)coprimePairs \pi^2 \approx \frac{6 \times \textit{totalPairs}}{\textit{coprimePairs}} = \frac{3N(N-1)}{\textit{coprimePairs}}π2coprimePairs6×totalPairs=coprimePairs3N(N1)
π≈3N(N−1)coprimePairs \pi \approx \sqrt{\frac{3N(N-1)}{\textit{coprimePairs}}}πcoprimePairs3N(N1)

互质对判定

对于每对数(a,b)(a, b)(a,b),使用欧几里得算法计算其最大公约数:

  • gcd⁡(a,b)=1\gcd(a, b) = 1gcd(a,b)=1,则aaabbb互质。
  • 否则,不互质。

由于N<50N < 50N<50,总对数不超过122512251225,直接枚举所有对并计算gcd⁡\gcdgcd即可。

边界情况

如果coprimePairs=0\textit{coprimePairs} = 0coprimePairs=0,则公式中分母为零,无法计算估计值,此时输出No estimate for this data set.

精度要求

输出需要保留666位小数,使用浮点数运算时应注意精度。π\piπ的估计值使用doublelong double类型计算即可。

复杂度分析

  • 每组数据需要计算O(N2)O(N^2)O(N2)gcd⁡\gcdgcd,每次gcd⁡\gcdgcd的时间复杂度为O(log⁡max⁡(a,b))O(\log \max(a, b))O(logmax(a,b))
  • N≤50N \le 50N50,完全可接受。

代码实现

// Pi// UVa ID: 412// Verdict: Accepted// Submission Date: 2016-07-14// UVa Run Time: 0.060s//// 版权所有(C)2016,邱秋。metaphysis # yeah dot net#include<bits/stdc++.h>usingnamespacestd;intgcd(inta,intb){intt;while(a%b)t=a,a=b,b=t%b;returnb;}intmain(intargc,char*argv[]){ios::sync_with_stdio(false);intn;while(cin>>n,n){vector<int>number(n);for(inti=0;i<n;i++)cin>>number[i];intcounter=0;for(inti=0;i<n;i++)for(intj=i+1;j<n;j++)if(gcd(number[i],number[j])==1)counter++;if(counter==0)cout<<"No estimate for this data set."<<endl;else{longdoublepi=sqrt(3.0*n*(n-1)/counter);cout<<fixed<<setprecision(6)<<pi<<endl;}}return0;}
http://www.jsqmd.com/news/969451/

相关文章:

  • SAP ALV单元格修改后自动联动更新?一个CL_ALV_CHANGED_DATA_PROTOCOL的实战教程
  • 推荐系统为何忽略维京长船?文化实体的数字激活方法论
  • Windows和Office一键激活终极指南:KMS_VL_ALL_AIO智能脚本详解
  • FlowFuse Dashboard:现代化物联网可视化平台架构解析
  • 汽车电子工程师入行指南:从知识体系构建到职业发展路径
  • 解构FDS:如何用开源大涡模拟重塑建筑火灾安全的技术范式
  • SM5964单片机串口ISP烧录工具包:含可编译源码、HEX/BIN固件及Keil工程完整备份
  • 嵌入式图像存储计算:BMP文件大小与硬件设计实战解析
  • Linux内核等待队列:驱动开发中的休眠与唤醒机制详解
  • SheetJS终极指南:如何在JavaScript中轻松处理Excel文件
  • 5分钟快速上手:yuzu Switch模拟器完整配置指南
  • 重构内容获取:基于异步并发的抖音下载器架构深度解析
  • 零依赖图片对比技术:解决视觉差异分析的前端架构方案
  • 深入解析RT-Thread:从实时内核到组件生态的嵌入式开发实践
  • Steam创意工坊下载器终极指南:快速获取Steam模组的最佳方法
  • Windows下用MFC通过USB-CAN设备解析S19并生成BIN固件的可运行工程
  • 5个理由告诉你为什么mORMot2是Delphi/FreePascal开发者的最佳选择
  • 区块链三难困境本质与模块化破局路径
  • 如何免费解锁加密音乐:Unlock-Music终极指南
  • Keil C51编译器0xFD幽灵Bug:嵌入式汉字显示乱码的根源与解决方案
  • Mac用户终极指南:如何用12306ForMac高效抢票的完整教程
  • 如何快速将B站缓存视频转换为MP4:m4s-converter完整实践指南
  • 终极TIDAL无损音乐下载指南:tidal-dl-ng让你轻松获取24-bit HiRes音质
  • 2026丙烯酸聚氨酯面漆优质厂家推荐 优选河北永邯环保科技有限公司 - 奔跑123
  • 突破iOS限制!TrollInstallerX一键实现应用自由终极指南
  • 一个人写了一套店群自动化软件:我是如何把10人运营团队月成本从8万降到6千的
  • 【CSDN AI数字营销套餐续费指南】:过期后文章与卡片是否失效?3大实测结论+2种补救方案
  • iOS激活锁绕过终极方案:applera1n深度技术解析与实战指南
  • 如何彻底驯服你的ThinkPad风扇?TPFanCtrl2终极静音解决方案揭秘
  • AMD Ryzen处理器性能调优神器:RyzenAdj完整使用指南