-
Notifications
You must be signed in to change notification settings - Fork 0
/
problem8.cpp
78 lines (64 loc) · 1.18 KB
/
problem8.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <cmath>
using namespace std;
long mysolution(long);
long opsolution(long);
long gcd (long, long);
int main(){
long s = 100000;
cout<<opsolution(s)<<endl;;
return 0;
}
long mysolution(long sum){
long prod;
for (long a = 3;a<(sum-3)/3;a++){
for (long b = a+1;b<(sum-1-a)/2;b++){
long c = sum-a-b;
if (c*c == a*a + b*b){
//cout<<a<<"+"<<b<<"+"<<c<<endl;
prod = a*b*c;
return prod;
}
}
}
}
long opsolution (long sum){
//long s2, sm, k, d,m,n,a,b,c, mlimit;
long a,b,c,
m,n,
k,d,
s2,sm,mlimit;
s2 = sum / 2;
mlimit = ceil(sqrt(s2))-1;
for (long m = 2; m <= mlimit; m++){
if (s2 % m == 0){
sm = s2 / m;
//We are finding an odd divisor of sm, thus all even factor c may
//be removed
while (sm % 2 == 0)
sm = sm/2;
//k must be odd
if (m %2 == 1)
k = m+2;
else
k=m+1;
while (k<2*m && k<=sm){
if (sm %k ==0 && gcd (k,m)==1){
d=s2/(k*m);
n=k-m;
a= d*(m*m -n*n);
b = 2*d*m*n;
c = d*(m*m+n*n);
return a*b*c;
}
k+=2;
}
}
}
}
long gcd(long a, long b){
if (b==0)
return a;
else
return gcd(b,a%b);
}