/
nea
/
androidGroupBuilder
Обзор
Документация
Войти
/
nea
/
androidGroupBuilder
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
app/src/main/java/com/ea/groupbuilder/classPrime.java
277 строк
16 KB
ea
Группа Автоморфизмов отлажено 23_04_2026
23 апр 2026, 17:08
23 апр 2026, 17:08
4513276
Код
Авторство
О чём код?
package com.ea.groupbuilder; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.util.Log; import java.util.Arrays; public class classPrime { // работа с p-подгруппой IdGroup = [144,183] private static final String TAG = "GRUGRA_PRINE"; final static private boolean DISPLAYLOG = false; private mAplication mApp; static private substitutionS classSubs; static private SQLiteDatabase db; private DbHelper dbH; private boolean flgSn; private int vidWgrup = 0; // vidWgrup = 0 - сама группа, 1 - группа автоморфизмов public void f_init(mAplication mApp_, boolean fSn, int vidWgrup_ ) { // mApp = mApp_; db = DbHelper.db; classSubs = mApp.classSubs; dbH = mApp.dbH; flgSn = fSn; vidWgrup = vidWgrup_; if (DISPLAYLOG) Log.e(TAG, " classPrime f_init vidWgrup= " + vidWgrup + " flgSn = " + flgSn + " faktSnLen = " + DbHelper.faktSnLen + " flgSn = " + flgSn); } public String f_primeNorm(int pe, String nGr, boolean expFlg) { // вычисляет нормализатор силовской подгруппы nGr // expFlg = true - вычислить экспоненту подгруппы final String ss[] = {"select count(*) as ccc from " + DbHelper.sylov_table[vidWgrup] + " where num = " + nGr + ";", "delete from sylov_id;", "insert into " + DbHelper.normalizer[vidWgrup] + " (pe, id_s, num)" + " select distinct " + pe + ", id_s, " + nGr + " from sylov_id;", "select count(*) as ccc from " + DbHelper.normalizer[vidWgrup] + " where num = " + nGr + ";", // 3 "delete from params where parm = 'sylovPrimeGrupNorm" + (vidWgrup == 0 ? "_g" : "_a") +"' and ind = " + pe + ";", "select max(deg) as ccc from " + DbHelper.elements[vidWgrup] + " where pe = " + pe + ";" }; String retSoob = ""; int oodrNorm, orderSyl = dbH.f_getCount(ss[0]); // порядок подгруппы силова db.execSQL(ss[1]); // delete from sylov_id db.execSQL("insert into sylov_id (id_s, num) \n" + // в sylov_id id нормализатора "select distinct W.id_left, count( distinct W.id_pair) sss\n" + " from " + DbHelper.switchboard[vidWgrup] + " W, " + DbHelper.sylov_table[vidWgrup] + " S1, " + DbHelper.sylov_table[vidWgrup] + " S2\n" + " where W.id_pair = S1.id_s and W.id_right = S2.id_s and S1.num = "+ nGr + " and S2.num = " + nGr + "\n" + " group by W.id_left\n" + " HAVING sss = " + orderSyl + ";"); db.execSQL(ss[2]); // insert into normalizer oodrNorm = dbH.f_getCount(ss[3]); if (oodrNorm <= 0) { Log.e(TAG, "f_primeNorm pe= " + pe + " # =" + nGr + " поряок нормализатора " + oodrNorm + " countElements " + DbHelper.countElements + " порядок группы " + orderSyl); retSoob = "Нормализатор силовской подгруппы для P = " + pe + " имеет порядок " + oodrNorm + " порядок группы " + orderSyl + " что-то не так!!!"; if (DISPLAYLOG) Log.e(TAG, "f_primeNorm pe= " + pe + " # ="+ nGr + " поряок нормализатора 0 countElements " + DbHelper.countElements + " порядок группы " + orderSyl); } else { retSoob = "Нормализатор силовской подгруппы для P = " + pe + " имеет порядок " + oodrNorm + " индеск " + DbHelper.countElements / oodrNorm + " порядок группы " + orderSyl; if (DISPLAYLOG) Log.e(TAG, "f_primeNorm pe= " + pe + " # ="+ nGr + " поряок нормализатора " + oodrNorm + " индеск " + DbHelper.countElements / oodrNorm + " порядок группы " + orderSyl); } db.execSQL(ss[4]); db.execSQL("insert into params (parm, val_txt, val, ind) values ('sylovPrimeGrupNorm" + (vidWgrup == 0 ? "_g" : "_a") + "' , " + orderSyl + ", "+ oodrNorm + ", " + pe + " ) ;"); if (expFlg) { oodrNorm = dbH.f_getCount(ss[5]); db.execSQL("insert into " + DbHelper.exponent[vidWgrup] + " (pe, val_exp) values (" + pe + ", "+ oodrNorm + " );"); } return retSoob; } public void f_primeConj(int pe, String nGr) { // заносит классы сопр элементов внутри сил подгруппе nGr в поле " + DbHelper.sylov_table[vidWgrup] + ".effort if (DISPLAYLOG) Log.e(TAG, " f_primeConj f_calcPrim pe = " + pe + " flgSn = " + flgSn + " sylNum = " + nGr); final String sqlS1 = "select id_s || ' ' as stext from " + DbHelper.sylov_table[vidWgrup] + " where num = " + nGr + " and effort = 0;"; dbH.f_getMas(sqlS1); // выбор _id из сил подгруппы у которого нет еще класса int i, m, klaSS = 1, cc = DbHelper.selectedMas.length; int kls[] = new int[cc]; for (i = 0; i<cc; i++) kls[i] = 0; String ids = "", id0[] = new String[cc]; id0 = Arrays.copyOf( DbHelper.selectedMas, cc); do { ids = ""; for (i = 0; i<cc; i++) if (kls[i] == 0) { ids = id0[i]; break; } if (ids.length() == 0) { break; } else { // CREATE TABLE pairing_area (_id INTEGER primary key autoincrement, class_area INTEGER, num INTEGER, id_subs INTEGER NOT NULL, cykl_len TEXT) // klaSS = dbH.f_getCount("select class_area as ccc from pairing_area where id_subs = "+ ids + ";"); // id_pair = код сопряженного элемента = (idleft**-1) * idright * idleft if (DISPLAYLOG) Log.e(TAG, " f_primeConj f_calcPrim id = " + ids + " klaSS = " + klaSS + " sylNum = " + nGr); // записать новый класс String sqlS2 = "select distinct W.id_pair || ' ' as stext \n" + // запись нового класса " from " + DbHelper.sylov_table[vidWgrup] + " S, " + DbHelper.switchboard[vidWgrup] + " W\n" + " where S.num = "+ nGr +" and S.id_s = W.id_pair and W.id_right = "+ ids + " and \n" + " W.id_left in (\n" + " select ss.id_s from " + DbHelper.sylov_table[vidWgrup] + " SS where ss.num = "+ nGr +"\n" + " ) and\n" + " W.id_pair in (\n" + " select DD.id_s from " + DbHelper.sylov_table[vidWgrup] + " DD where DD.num = "+ nGr +"\n" + ") order by W.id_pair asc;"; dbH.f_getMas(sqlS2); // выбор _id сопряженных с ids в nGr for (i = 0; i<DbHelper.selectedMas.length; i++) for (m=0; m<cc; m++) if (DbHelper.selectedMas[i].equals( id0[m]) ) { kls[m] = klaSS; } klaSS++; } } while (true); // в sylov_table.effort for (m=0; m<cc; m++) { db.execSQL( "update " + DbHelper.sylov_table[vidWgrup] + " set effort = " + kls[m] + " where num = "+ nGr +" and id_s = " + id0[m] + ";" ); } } public int f_prime(int pe, String sylNum) { // final String tElem = flgSn ? "elements_n" : DbHelper.elements[vidWgrup], tSwitch = flgSn ? "switchboard_n" : DbHelper.switchboard[vidWgrup], tMult = flgSn ? "temp_multiplication_n" : DbHelper.temp_multiplication[vidWgrup]; final String sqlCl[] = { "delete from temp_prim where sylow_num = '" + sylNum + "';" /* "insert into switch_prim (pe, sylow_num, id_switch, id_pair, id_left, id_right)\n" + " select " + pe + ", "+ sylNum + ", id_switch, id_pair, id_left, id_right\n" + " from " + tSwitch + " S, " + tElem + " A, " + tElem + " B\n" + " where A._id = S.id_left and B._id = id_right and A.pe = " + pe + " and B.pe = " + pe + ";", */ }; String fForm; int i, deg, iDeg, id, idL, idM, iId, kDeg, kommNum, // признак коммутанта p-группы для idM kommNumS; // признак коммутанта p-группы для id_s for (i = 0; i < sqlCl.length; i++) // ????? db.execSQL(sqlCl[i]); if (DISPLAYLOG) Log.e(TAG, " f_prime f_calcPrim pe = " + pe + " flgSn = " + flgSn + " sylNum = " + sylNum); // заполняю поле forming в elements и в temp_pe заношу id_s (с повторениями), строит табл generators_element // не беру элем коммутанта, только из сил подгруппы и не 1 and switchboard_num = 0 Cursor curForm = db.rawQuery("select _id, deg, cykl_len from " + tElem + " where instr(sylow_num, '" + sylNum + "') > 0 and pe > 0 " + " order by deg desc, cykl_len desc;", null); curForm.moveToFirst(); if (curForm.getCount() > 0) { iDeg = curForm.getColumnIndex("deg"); iId = curForm.getColumnIndex("_id"); do { id = curForm.getInt(iId); deg = curForm.getInt(iDeg); idM = dbH.f_getCount("select count(id_s) as ccc from temp_prim where id_2 = "+ id + ";"); kommNumS = dbH.f_getCount("select count(id_switch) as ccc from " + tSwitch + " S, " + DbHelper.elements[vidWgrup] + " A, " + DbHelper.elements[vidWgrup] + " B\n" + " where S.id_left = A._id and S.id_right = B._id and\n" + " A.pe = " + pe + " and B.pe = " + pe + " and id_switch = "+ id + ";"); if (idM == 0 ) { // idM > 0 - этот id есть степень уже обработанного эл-та, kommNum > 0 - эл-нт коммутанта P подгруппы fForm = id + "("+ deg + "), "; // обрабатываю эту степень kDeg = 1; // текущая степень образующего id idL = id; db.execSQL("insert into temp_prim (pe, sylow_num, id_1, id_2, id_s, deg, ndeg, list_num, switchboard_num, switchboard_s) " + "values (" + pe + ", '" + sylNum + "', 0, 0, " + id + ", 1, 1 , '" + fForm +"', " + kommNumS + ", "+ kommNumS + ");"); // id_1=0, id, id - главный элемент do { // вычисляю все степени эл-та idM = dbH.f_getCount("select idproiz as ccc from "+ tMult + " where idleft = "+ idL + " and idright = " + id + ";"); deg = dbH.f_getCount("select deg as ccc from " + tElem + " where _id = " + idM + ";"); if (deg == 0) // получил 1 break; kommNum = dbH.f_getCount("select count(id_switch) as ccc from " + tSwitch + " S, " + DbHelper.elements[vidWgrup] + " A, " + DbHelper.elements[vidWgrup] + " B\n" + " where S.id_left = A._id and S.id_right = B._id and\n" + " A.pe = " + pe + " and B.pe = " + pe + " and id_switch = "+ idM + ";"); kDeg ++; /* " deg INTEGER, " + // степень id_2 (id_2 ** deg = 1) или 0, если id_1 = 0 " id_1 INTEGER, " + // idL " id_2 INTEGER, " + // idM = idL * id " id_s INTEGER, " + // id = исходный элемент, все степени которого ищем " ndeg INTEGER, " + // id_s в этой степни есть id_2 : id_2 = id_s ** ndeg */ // if (kommNum == 0) // получил 1 по модулю коммутанта подгруппы fForm += idM + "(" + deg + "), "; db.execSQL("insert into temp_prim (pe, sylow_num, id_1, id_2, id_s, ndeg, deg, list_num, switchboard_num, switchboard_s) " + "values (" + pe + ", '" + sylNum + "', " + idL + ", " + idM + ", " + id + ", " + kDeg + ", " + deg + ", '" + fForm + "', " + kommNum + ", " + kommNumS + ");"); if (DISPLAYLOG) Log.e(TAG, "f_calcPrim fff=" + fForm + " kDeg = " + kDeg + " ndeg = " + deg + " id=" + id + " idL=" + idL + " idM =" + idM + " kommNum = " + kommNum + " kommNumS = " + kommNumS); idL = idM; } while (true); db.execSQL("update " + tElem + " set forming = '" + fForm + "' where _id = " + id + ";"); if (DISPLAYLOG) Log.e(TAG, "f_prime write fff=" + fForm + " id = " + id + " idM =" + idM ); } } while (curForm.moveToNext()); } curForm.close(); db.execSQL("delete from generators_element where pe = " + pe + " and sylow_num = '" + sylNum + "';") ; db.execSQL("insert into generators_element (id_s, pe, sylow_num) " + "select distinct id_s, " + pe + ", null " + "from temp_prim where id_2 = 0 and sylow_num = '"+ sylNum + "' and switchboard_num = 0;") ; db.execSQL("delete from generators_element where id_s in (" + "select id_2 from temp_pe where sylow_num = '"+ sylNum + "');"); // idM /* // удалить лишние с min length(ciklos) select idproiz, idleft, idright, ciklos, E.deg, forming, cykl_len, length(ciklos) lll from elements E, temp_multiplication where idproiz = E._id and idleft in ( select id_s from generators_element) and idright in ( select id_s from generators_element) and idproiz in ( select id_s from generators_element) order by length(ciklos) asc do { curForm = db.rawQuery("select idproiz, length(ciklos) lll from elements E, temp_multiplication\n" + " where idproiz = E._id and idleft in (\n" + " select id_s from generators_element) and idright in (\n" + " select id_s from generators_element) and idproiz in ( \n" + " select id_s from generators_element) \n" + " order by length(ciklos) asc;", null); curForm.moveToFirst(); if (curForm.getCount() > 0) { iId = curForm.getColumnIndex("idproiz"); id = curForm.getInt(iId); db.execSQL("delete from generators_element where id_s = " + id + ";") ; // Log.e(TAG, "f_calcPrim delete id_s =" + iId + " id = " + id ); } else break; } while (true); */ iDeg = dbH.f_getCount("select count(*) as ccc from generators_element where pe = " + pe + " and sylow_num = '" + sylNum + "';"); // mApp.putProt("Всего генераторов для простого p = " + pe + " подгруппы силова " + sylNum + " " + iDeg); if (DISPLAYLOG) Log.e(TAG, "f_calcPrim Всего генераторов для простого p = " + pe + " " + iDeg + " " + sylNum); return iDeg; } } //-------------------------------------