Multiplicative Group

Returns multiplicative grop (Z/mZ)*

by evgkch

HTML

<div id="root">
  <div id="eiler"></div>
</div>

SCSS

body {
  background-color: whitesmoke;
  font-family: Verdana;
  
}

#root {
  цшверЖ 1
}
  
  #eiler {
    font-size: 14pt;
    word-wrap: break-word;
  }
}

JavaScript

const el = document.getElementById('eiler');

const evalReminder = (a, b) => a < b ? a : a % b;

const checkByCoprime = (a, b) => {
  for (let i = 2; i < b; i++)
    if (evalReminder(a * i, b) === 0)
    	return false;
  return true;
};

const evalEulerFunc = t => {
	let result = [];
	for (let a = 1; a < t; a++)
    if (checkByCoprime(a, t))
    	result.push(a);
  return result;
};

const renderEulerFunc = (m) => {
	const buffer = [];
	const result = evalEulerFunc(m);
  result.forEach((a, i) => {
  	if (!buffer[i]) buffer[i] = [];
    result.forEach((b, j) => {
    	const product = a * b;
    	buffer[i].push(evalReminder(product, m));
  	});
  });
  console.log(buffer)
  const innerHTML = `(Z/${m}Z)* = {${result}}`;
  el.innerHTML = innerHTML;
};

function getCayleyTable(m) {	
	const group = evalEulerFunc(m);
  const groupLength = group.length;
  const cayleyTable = [];
  for (let i = 0; i < groupLength; i++)
  {
  	if (!cayleyTable[i]) cayleyTable[i] = [];
    for (let j = 0; j < groupLength; j++)
    	cayleyTable[i].push(evalReminder(group[i] * group[j], m));
  };
  return cayleyTable;
}

function createTable(tableData) {
  const table = document.createElement('table');
  const tableBody = document.createElement('tbody');
  tableData.forEach(rowData => {
    const row = document.createElement('tr');
    rowData.forEach(cellData => {
      const cell = document.createElement('td');
      cell.appendChild(document.createTextNode(cellData));
      row.appendChild(cell);
    });

    tableBody.appendChild(row);
  });
  table.appendChild(tableBody);
  el.appendChild(table);
}

createTable(getCayleyTable(12))