Module:No-1s limits: Difference between revisions
Dummy index (talk | contribs) No edit summary |
Dummy index (talk | contribs) up-to 7-odd-limit case |
||
| Line 8: | Line 8: | ||
equave = equave or 2 | equave = equave or 2 | ||
local ratios = {} | local ratios = {} | ||
if rat. | if rat.eq(rat.modulo_mul(rat.new(q, 1), equave), 1) then return ratios end | ||
if previous then | if previous then | ||
for n = 2, q do | for n = 2, q do | ||
if rat. | if not rat.eq(rat.modulo_mul(rat.new(n, 1), equave), 1) then | ||
local a = rat.new(n, q) | local a = rat.new(n, q) | ||
a = rat.modulo_mul(a, equave) | a = rat.modulo_mul(a, equave) | ||
| Line 30: | Line 30: | ||
else | else | ||
for n = 2, q do | for n = 2, q do | ||
for m = 2, q do | if not rat.eq(rat.modulo_mul(rat.new(n, 1), equave), 1) then | ||
for m = 2, q do | |||
if not rat.eq(rat.modulo_mul(rat.new(n, 1), equave), 1) then | |||
local a = rat.new(n, m) | |||
a = rat.modulo_mul(a, equave) | |||
local key = rat.as_ratio(a) | |||
ratios[key] = a | |||
end | |||
end | |||
end | end | ||
end | end | ||
| Line 182: | Line 186: | ||
-- find vals generate no-1s consistency intervals | -- find vals generate no-1s consistency intervals | ||
-- | -- returns string with wart notation | ||
-- limit must meet no-1s odd-limit consistency | -- limit must meet no-1s odd-limit consistency | ||
function p.vals(et, limit) | function p.vals(et, limit) | ||
local primes = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43} | |||
local wart = 'abcdefghijklmn' | |||
local patent_val = {} | |||
local wart_dir = {} | |||
local minprime | |||
local val = {} | |||
local rets = {} | |||
for i = 1, #primes do | |||
patent_val[i] = ET.approximate(et, primes[i]) | |||
if ET.cents(et, patent_val[i]) < math.log(primes[i]) / math.log(2) * 1200 then | |||
wart_dir[i] = -1 | |||
else | |||
wart_dir[i] = 1 | |||
end | |||
end | |||
if et.equave == 2 then | |||
minprime = 3 | |||
else | |||
minprime = 2 | |||
end | |||
local previ = 1 | |||
for i = 1, #primes do | |||
local p = primes[i] | |||
if p > limit then break end | |||
if p == et.equave then | |||
val[i] = patent_val[i] | |||
elseif p == minprime then | |||
val[i] = patent_val[i] | |||
previ = i | |||
else | |||
val[i] = val[previ] + ET.approximate(et, rat.new(p, primes[previ])) | |||
previ = i | |||
end | |||
end | |||
if limit < minprime * minprime then | |||
local nonpatent = false | |||
local bias = 0 | |||
for i = 1, #val do | |||
local p = primes[i] | |||
if p == et.equave then | |||
elseif p == minprime then | |||
bias = wart_dir[i] | |||
else | |||
if val[i] ~= patent_val[i] then nonpatent = true end | |||
end | |||
end | |||
rets[1] = '' | |||
if et.equave ~= 2 then | |||
local p = table.find(primes, et.equave) | |||
if p then | |||
rets[1] = rets[i] .. wart[i] | |||
else | |||
rets[1] = rets[i] .. 'q' | |||
end | |||
end | |||
rets[1] = rets[1] .. et.size | |||
if nonpatent then | |||
rets[2] = '' .. rets[1] | |||
for i = 1, #val do | |||
local p = primes[i] | |||
local difference = (val[i] - patent_val[i]) * wart_dir[i] | |||
if difference > 0 then | |||
rets[1] = rets[1] .. wart[i] * (difference * 2) | |||
elseif difference < 0 then | |||
rets[1] = rets[1] .. wart[i] * (difference * 2 - 1) | |||
end | |||
end | |||
for i = 1, #val do | |||
local p = primes[i] | |||
if p ~= equave then val[i] = val[i] - bias end | |||
local difference = (val[i] - patent_val[i]) * wart_dir[i] | |||
if difference > 0 then | |||
rets[2] = rets[2] .. wart[i] * (difference * 2) | |||
elseif difference < 0 then | |||
rets[2] = rets[2] .. wart[i] * (difference * 2 - 1) | |||
end | |||
end | |||
end | |||
else | |||
end | |||
return table.concat (rets, ", ") | |||
end | end | ||