UVA 106 Fermat vs. Pythagoras
2014-09-09 22:21
211 查看
涉及到一些数论的知识,就直接在这里记录了
勾股数的产生公式a=m^2-n^2,b=2*m*n,c=m^2+n^2,枚举m和n就可以求出所有<=N的互质的勾股数
证明参考这里 /article/7826019.html
勾股数的产生公式a=m^2-n^2,b=2*m*n,c=m^2+n^2,枚举m和n就可以求出所有<=N的互质的勾股数
证明参考这里 /article/7826019.html
#include <map> #include <set> #include <list> #include <math.h> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #include <vector> #include <climits> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);} //毕达哥拉斯数 #define MAXN 1000001 bool vis[MAXN]; int main() { int N,limit,x,y; while (scanf("%d",&N)!=EOF) { memset(vis,false,sizeof(vis)); limit=floor(sqrt(N)); int total=0; for (int i=1;i<limit;i++) for (int j=i+1;j<=limit;j+=2) { if (gcd(i,j)==1 && i*i+j*j<=N) { x=j*j-i*i; y=2*i*j; total++; int z=i*i+j*j; for (int st=1;z*st<=N;st++) vis[st*x]=vis[st*y]=vis[st*z]=true; } } int cnt=0; for (int i=1;i<=N;i++) if (!vis[i]) cnt++; printf("%d %d\n",total,cnt); } return 0; }
相关文章推荐
- UVA 106 Fermat vs. Pythagoras
- UVa 106 - Fermat vs Pythagoras(数论题目)
- uva 106【Fermat vs. Pythagoras】
- UVA - 106 Fermat vs. Pythagoras
- UVA - 106 Fermat vs. Pythagoras 勾股数
- UVA106- Fermat vs. Pythagoras(素勾股数)
- uva 106 - Fermat vs. Pythagoras
- Uva 106-Fermat vs. Pythagoras(勾股数性质)
- uva106 - Fermat vs. Pythagoras()
- UVa:106 Fermat vs. Pythagoras
- Fermat vs. Pythagoras - UVa 106 勾股数
- uva 106 Fermat vs. Pythagoras(勾股数求法)
- UVa 106 && POJ 1305 - Fermat vs. Pythagoras(毕达哥拉斯三元组)
- UVa 106 - Fermat vs. Pythagoras 素勾股数
- UVa 106 - Fermat vs. Pythagoras
- uva 106 - Fermat vs. Pythagoras()
- UVa 106 - Fermat vs. Pythagoras
- UVa 106 - Fermat vs. Pythagoras 素勾股数
- uva 106 Fermat vs. Pythagoras
- UVa 106 - Fermat vs. Pythagoras