1 条题解
-
0
C :
#include <stdio.h> #define M 100000 int arr[M+1]; int gcd(int a, int b) { if(b==0) return a; else return gcd(b, a%b); } void init() { int i, j, x, y, z; for(i=1; i<=800; ++i) for(j=i+1; 2*j*j+2*j*i<=M; ++j) { x=2*i*j; y=j*j-i*i; z=j*j+i*i; //确保x,y,z互质 if(gcd(gcd(x, y), z) == 1) { int t = x+y+z; int tmp = 1; while(tmp*t <= M) { arr[tmp*t]++; ++tmp; } } } } int main() { init(); int T, i, A; scanf("%d", &T); for(i = 1; i <= T; i++) { scanf("%d", &A); printf("%d\n", arr[A]); } return 0; }
C++ :
#include<iostream> using namespace std; int main() { int i; //存储测试数据的组数 int j; //循环变量 int t1,t2; int a; //边长1 int b; //边长2 int c; int n; int n1; long long int area = 0; cin >> i; int *counter = new int[i]; //记录对应周长符合条件的直角三角形的组数 for(j = 0; j < i; j++) { cin >> n; counter[j] = 0; n1 = n*0.5; for(a = n/4+1; a < n1; a++) { area = a*a; t1 = (n-a)/2; t2 = n/2 - a +1; if(t2 > a) continue; for(b = t2; b < a && b < t1; b++) { c = n - a - b; if(c*c == area+b*b) { counter[j]++; } } } } for(j = 0; j < i; j++) { cout << counter[j] << endl; } delete [] counter; return 0; }
- 1
信息
- ID
- 1320
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者