当前位置: 首页 > 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.zskr.cn/news/1481167.html

相关文章:

  • 汽车电子工程师入行指南:从知识体系构建到职业发展路径
  • 嵌入式图像存储计算:BMP文件大小与硬件设计实战解析
  • 解构FDS:如何用开源大涡模拟重塑建筑火灾安全的技术范式
  • Steam创意工坊下载器终极指南:快速获取Steam模组的最佳方法
  • 零依赖图片对比技术:解决视觉差异分析的前端架构方案
  • 区块链三难困境本质与模块化破局路径
  • 如何免费解锁加密音乐:Unlock-Music终极指南
  • 终极TIDAL无损音乐下载指南:tidal-dl-ng让你轻松获取24-bit HiRes音质
  • 嵌入式语音报警系统设计:基于ISD1760的矿井监测应用
  • 如何彻底驯服你的ThinkPad风扇?TPFanCtrl2终极静音解决方案揭秘
  • 纯Python写的校园选课与班级管理命令行工具,带完整类设计和本地文件存档
  • AMD Ryzen处理器性能调优神器:RyzenAdj完整使用指南
  • 从Protel 99 SE到Altium Designer:官方数据迁移与元件库转换完整指南
  • ROFL-Player全攻略:轻松玩转英雄联盟历史回放,告别版本兼容困扰
  • 芯片时序收敛利器:Timing ECO策略、流程与实战避坑指南
  • STM32F103C8T6 HAL工程:串口DMA单次收发 + printf式发送 + LED状态反馈
  • 云音乐歌词提取实战:3分钟掌握网易云QQ音乐LRC歌词获取终极方案
  • 热式气体质量流量计优质厂家TOP10:2026年度国产标杆品牌综合实力深度测评与权威推荐 - 仪表品牌排行榜
  • 别再只会su - kingbase了!这15个高频KingbaseES命令,运维新手必收藏
  • 【愚公系列】《移动端AI应用开发》017-Android端应用开发(网络通信与API集成)
  • 如何将图片转为3D模型:ImageToSTL完整使用指南
  • 录播姬:专业级B站直播录制与修复工具完全指南
  • NcmpGui:3步轻松解锁网易云音乐NCM加密文件
  • 2026年国内环氧砂浆厂家实测排行:推荐河北永邯环保科技有限公司 - 奔跑123
  • 生产环境 CPU 使用率 90%+:原因 + 排查 + 解决方案
  • 3步实现OBS多平台直播:免费高效的多路推流终极指南
  • 如何在5分钟内为OBS添加专业虚拟背景:obs-backgroundremoval完全指南
  • League Akari:基于LCU API的英雄联盟自动化工具深度解析
  • 【2024最新版CSDN AI企业看板白皮书】:官方未明说但已上线的6项B端专属统计能力,含GDPR/等保2.0适配字段
  • FlicFlac:Windows上最简单高效的音频格式转换解决方案