/* Test of lcm/2 using gcd/2 [program = b * a div gcd(a,b),res = 10,count = 300] [program = a * b div (gcd(a,b) - 0),res = 10,count = 265] [program = b * a div gcd(b,a),res = 10,count = 261] [program = a * b div gcd(a,b),res = 10,count = 235] [program = a * b div gcd(b,a),res = 10,count = 220] [program = a * b div gcd(gcd(b,0),a),res = 10,count = 207] [program = b * a div (gcd(a,b) - 0),res = 10,count = 195] [program = b * gcd(a,a + a) div (gcd(a,b) - 0),res = 10,count = 132] [program = a * (b + (0 mod a + 0)) div (gcd(a,b) - 0),res = 10,count = 114] [program = b * a div gcd(gcd(b,0),a),res = 10,count = 101] [program = a * b div gcd(a,gcd(a,b mod 9) - a),res = 10,count = 92] [program = a * b div gcd(a * (b * (b - 6 mod 4)),gcd(a,b)),res = 10,count = 90] [program = a * b div gcd(a,a - b),res = 10,count = 84] [program = a * b div gcd(gcd(b,a),a),res = 10,count = 80] [program = b * gcd(a,a + a) div gcd(a,b),res = 10,count = 73] [program = a * (b + (0 mod a + 0)) div gcd(b,a),res = 10,count = 73] [program = a * b div gcd((5 + 9 mod (10 * b)) * a,gcd(a,b)),res = 10,count = 64] [program = a * (b + (0 mod a + 0)) div gcd(gcd(b,0),a),res = 10,count = 57] [program = a * (b + (0 mod a + 0)) div gcd(a,b),res = 10,count = 54] [program = b * gcd(a,a + a) div gcd(b,a),res = 10,count = 47] [program = a * b div gcd(0,gcd(a,b)),res = 10,count = 43] [program = a * b div gcd(gcd(0,a),gcd(b * (7 div 7 mod a),a)),res = 10,count = 36] [program = a * (b + (0 mod a + 0)) div gcd(gcd(b,a),a),res = 10,count = 25] [program = a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10)) * b,res = 10,count = 25] [program = a * b div gcd(b,gcd(a,a)),res = 10,count = 24] [program = b * gcd(a,a + a) div gcd(gcd(b,0),a),res = 10,count = 20] [program = a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10)) * (b + b - b),res = 10,count = 17] [program = a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10)) * gcd(a div (0 + 9),b),res = 2,count = 10] [program = (b + b - b) * (a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10))),res = 10,count = 7] [program = b * (a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10))),res = 10,count = 5] [program = gcd(b,b) * gcd((b div b - a) mod (b * 9) + a,1) * (a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10))),res = 10,count = 4] [program = gcd(a div (0 + 9),b) * (a div (gcd(b,7 * (a mod (b div (a + b) + b))) + 8 * (1 div 10))),res = 2,count = 3] [program = a * (b + (0 mod a + 0)) div gcd(a * (b * (b - 6 mod 4)),gcd(a,b)),res = 10,count = 2] [program = b * gcd(a,a + a) div gcd(gcd(0,b - a) mod (1 * 8),b),res = 10,count = 1] [program = b * a div gcd(gcd(b,a),a),res = 10,count = 1] resultMap = [10 = 33,2 = 2] Compare with Picat> cl(least_common_multiple) Picat> lcm(10,5)=LCM LCM = 10 */ data(lcm_test,Data,Vars,Unknown,Ops,Constants,MaxSize,Params) :- Data = [[[I,J],T] : I in 1..5,J in 1..5, T = lcm(I,J)], Ops = [+,-,*,gcd,div,mod], % Ops = [+,-,*,/,div,mod,if_then_else,==,!=], Vars = ['a','b'], Constants = 0..10, Unknown = [10,5], MaxSize = 21, Params = new_map([ stop_criteria=generations, num_gens=500 ]). lcm(X,Y)= abs(X*Y)//gcd(X,Y).