Skip to content

Commit 6343fcb

Browse files
committed
simplify sqrtnint in formulas
1 parent 7b0988f commit 6343fcb

File tree

4 files changed

+20
-2
lines changed

4 files changed

+20
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ To install or update LODA, please follow the [installation instructions](https:/
55
### Enhancements
66

77
* Improve negativity check in formula generation
8+
* Simplify formulas generated from `nrt` operations
89

910
## v24.12.8
1011

src/form/formula_gen.cpp

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,13 @@ bool FormulaGenerator::update(const Operation& op) {
141141
break;
142142
}
143143
case Operation::Type::NRT: {
144-
res = Expression(Expression::Type::FUNCTION, "sqrtnint",
145-
{prevTarget, source});
144+
if (source.type == Expression::Type::CONSTANT &&
145+
source.value == Number(2)) {
146+
res = Expression(Expression::Type::FUNCTION, "sqrtint", {prevTarget});
147+
} else {
148+
res = Expression(Expression::Type::FUNCTION, "sqrtnint",
149+
{prevTarget, source});
150+
}
146151
break;
147152
}
148153
case Operation::Type::GCD: {

tests/formula/formula.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ A110158: a(n) = b(max(n-2,0)), b(n) = b(n-2)+A077847(max(n-2,0)), b(1) = 0, b(0)
7979
A112032: a(n) = 2*a(n-2), a(1) = 1, a(0) = 4
8080
A123111: a(n) = ((n+1)^5+(n+1)^3+n+2)*(n+1)^2+1
8181
A134271: a(n) = b(max(n-2,0))+min(n-2,0), b(n) = 2*b(n-3)+b(n-2), b(2) = 4, b(1) = 0, b(0) = 2
82+
A135668: a(n) = sqrtint(n-1)+n+1
8283
A154118: a(n) = 2*a(n-1)+5, a(1) = 2, a(0) = 1
8384
A157823: a(n) = (min(n-1,0)-1)*(b(max(n-1,0))+3)+3, b(n) = 2*b(n-1), b(0) = 1
8485
A173673: a(n) = truncate((b(n)+min(n,n%2))/2), b(n) = b(n-2)+b(n-4), b(4) = 1, b(3) = 1, b(2) = 1, b(1) = 0, b(0) = 0
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
; A135668: a(n) = ceiling(n + sqrt(n)).
2+
; 2,4,5,6,8,9,10,11,12,14,15,16,17,18,19,20,22,23,24,25,26,27,28,29,30,32,33,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,56,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89
3+
4+
#offset 1
5+
6+
sub $0,1
7+
mov $1,$0
8+
nrt $1,2
9+
add $1,$0
10+
mov $0,$1
11+
add $0,2

0 commit comments

Comments
 (0)