HDU 6211 Pythagoras (勾股数+暴力枚举+优化)
来源:互联网 发布:第三代火影 知乎 编辑:程序博客网 时间:2024/06/06 01:34
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6211
毕达哥拉斯三元组,也就是勾股数可以表示为:
x=a^2-b^2
y=2ab
z=a^2+b^2,其中 a>b。
其中z最大,x和y的大小不确定。
同时当a,b互质时,这一组勾股数也互质。
通过暴力枚举a,b,使得 a^2+b^2<10^9,从而枚举10的9次方以内的勾股数。其中b的上限大约是sqrt(5*10^8)。
题中k最大为17,也就是最多只有131072个数,将符合要求的数取模131072后计数。而之后求模4得1的勾股数数量也就是模131072得1,5,9…的数量。
一些优化:
1、判断a,b互质时,直接写gcd函数会超时,可以求出b的质因子,判断a是否含有这些质因子。因为b的范围不超过30000,所以质因子不会超过5个。预处理求出所有数的质因子。
2、a,b奇偶性相同时,a^2-b^2和2ab都是偶数,必然不互质。所以可以利用a,b奇偶性不同来进行优化。
#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<vector>using namespace std;long long num[131072];//2的17次方const int INF=1000000000;vector<int> pf[25000];//存质因子int main(){ //求质因子 for(int i=2;i*i<=INF/2;i++) { int ii=i; for(int j=2;j<=i;j++) { if(ii==1) break; if(ii%j==0) { pf[i].push_back(j); while(ii%j==0) { ii/=j; } } } } //暴力求所有符合要求的y for(int b=1;b*b<=INF/2;b++) { for(int a=b+1;a*a+b*b<=INF;a+=2)//利用a、b奇偶性不同,这里写a++会超时 { //判断a、b是否互质,直接写gcd会超时 int flag=1; for(int i=0;i<pf[b].size();i++) { if(a%pf[b][i]==0)//a、b有相同的质因子 { flag=0; break; } } if(!flag) continue; num[max(2*a*b,a*a-b*b)%131072]++; } } int T; scanf("%d",&T); while(T--) { int k; scanf("%d",&k); long long ans=0; int n=1<<k; for(int i=0;i<n;i++) { int t; scanf("%d",&t); for(int j=0;j*n+i<131072;j++) { ans+=t*num[j*n+i]; } } printf("%lld\n",ans); } return 0;}
阅读全文
0 0
- HDU 6211 Pythagoras (勾股数+暴力枚举+优化)
- Hdu 6211 Pythagoras(暴力+勾股数)
- hdu 5952 Counting Cliques 暴力枚举+优化
- [HDU 6211] Pythagoras
- hdu 4968(暴力枚举)
- HDU 1856 More is better(并查集路径压缩+剪枝优化+暴力枚举)
- hdu - 4608 - I-number(暴力枚举)
- hdu——4462(暴力枚举)
- HDU 1172 猜数字(暴力枚举)
- hdu 4445 Crazy Tank (暴力枚举)
- HDU 4445 - Crazy Tank(暴力枚举)
- HDU 5310 Hidden String(暴力枚举)
- HDU 5522 Numbers (暴力枚举)
- HDU 2335 Containers(暴力枚举)
- HDU 5319 Painter(暴力枚举)
- HDU 5778 abs (数学+暴力枚举)
- HDU 4007 Dave (暴力枚举)
- HDU 5254 棋盘占领(暴力枚举)
- 【前端知识点】NodeJS优缺点及适用场景分析讨论解释
- Spring之核心容器bean
- ubuntu安装wdcp
- nginx 笔记
- 「OpenCV」conda安装一个OpenCV3
- HDU 6211 Pythagoras (勾股数+暴力枚举+优化)
- 2017 ACM/ICPC Asia Regional Qingdao Online
- 编程思想(技巧)---递归控制
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)
- puppet的rpm包安装及配置
- Maven构建多模块项目
- 按位与、或、异或等运算方法
- MySQL High Available with MHA(转)
- Spring JDBC-Spring事务管理之数据库事务基础知识