|
Примеры ИИ запросов
Примеры ИИ запросов - генератор псевдослучайных чисел на Java с помощью ИИ
Разработаем полный Android Java проект генератора псевдо-случайных чисел (ГПСЧ) с помощью ИИ chat.deepseek.com с использованием одного запроса.
Качественный генератор псевдо-случайных чисел использует алгоритм Блюма Блюма Шуба, генерирует Big Int числа от 1024 бит и больше.
Запрос проверялся в бесплатной версии Deepseek. Java проект компилировался в Android Studio для смартфона Samsung S21
Код приложения получился полностью рабочим.
Генератор ПСЧ >>
Программирование с помощью ИИ
Составим запрос к ИИ:
Сгенерируй максимально простой Java код приложения DeepseekBlume для Android 11 для SDK 33.
Разметка в Activity_main.xml должна позволять вертикальную прокрутку экрана для просмотра всего содержимого.
Нужно запросить и получить все необходимые для работы приложения разрешения, в том числе и разрешение на чтение и запись данных
В самом верху экрана разместить поле EditText для ввода текста. В EditText в подсказку Hint написать текст: Введите не менее 100 символов для создания ключа.
При вводе текста в это поле надо проверять количество введенных символов. Не разрешать вводить в это поле EditText больше 120 символов.
Как только количество введенных символов в поле EditText станет больше 100, выполнить следующие действия в пункте NN
Начало пункта NN
Создадим Int переменную E=2048
Нужно проверить в папке Download смартфона наличие текстового файла digital.bbs в формате JSON
Если файла digital.bbs в папке Download НЕТ, то выполнить лействия в пункте 1. Если в папке Download есть файл digital.bbs то пункт 1 не выполнять, а прочитать значения чисел P, Q, L из файла digital.bbs
Начало пункта 1.
Приложение должно вычислить два простых Big Int числа P и Q размерности E бит, удовлетворяющих условию, что каждое из них при делении на 4 даёт остаток 3
На экране приложения должны располагаться несколько TextView
В один TextView необходимо написать число P
Во второй TextView необходимо написать число Q
Необходимо вычислить число M=P*Q
Выбираем случайное Big Int число L размерности E бит, взаимно простое с M
Создать в папке Download смартфона текстовый файл digital.bbs и записать в него вычисленные значения чисел P, Q, L в формате JSON
Конец пункта 1.
Необходимо вычислить число M=P*Q
Вычисляем Big Int число K = L*L (т.е. как L в степени 2)
Находим Big Int число H=K mod M
В третий TextView необходимо записать Big Int число H
Далее создадим функцию DigCreate, которую используем E раз.
Создадим Big Int переменную NumRnd, с которой будем производить битовые операции.
Функция DigCreate делает E раз следующее:
Начало пункта 2.
- вычислим число N=(H*H) mod M
- из числа N выберем самый младший бит (бит чётности)
- в числе NumRnd сделаем сдвиг битов влево на одну позицию. При этом самый старший бит (самый правый) отбрасывается
- запишем значение из младшего бита числа N в младший бит числа NumRnd
- присвоим значение числа N числу H
- повторим действия, начиная с пункта 2.
После этого в числе NumRnd должны быть заполнены все биты.
Напишем число NumRnd в четвёртый TextView
Далее с числом NumRnd нужно произвести битовые операции.
1. Запомнить значение младшего бита (бита чётности)
2. Сдвинуть все биты числа NumRnd на один бит вправо
3. Записать запомненный в пункте1 бит чётности в самый старший (правый) бит числа NumRnd
Написать число NumRnd в пятый TextView
Конец пункта NN
(c) by Valery Shmelev https://t.me/llmsource/243
AI Powered Code Generation
ИИ сгенерировал следующие файлы:
MainActivity.java
package com.example.deepseekblume;
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import org.json.JSONObject;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.math.BigInteger;
import java.util.Random;
public class MainActivity extends AppCompatActivity {
private final int E = 2048; // Размерность в битах
private final int STORAGE_PERMISSION_CODE = 100;
private boolean isProcessing = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Настраиваем EditText
EditText inputEditText = findViewById(R.id.inputEditText);
inputEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
// Ограничиваем максимальную длину 120 символов
if (s.length() > 120) {
s.delete(120, s.length());
Toast.makeText(MainActivity.this, "Максимум 120 символов", Toast.LENGTH_SHORT).show();
return;
}
// Проверяем, если введено более 100 символов и еще не обрабатываем
if (s.length() >= 100 && !isProcessing) {
isProcessing = true;
// Проверяем разрешения перед началом работы
if (checkStoragePermission()) {
startAppLogic();
} else {
requestStoragePermission();
}
}
}
});
// Инициализируем TextView
findViewById(R.id.textViewP);
findViewById(R.id.textViewQ);
findViewById(R.id.textViewH);
findViewById(R.id.textViewNumRnd);
findViewById(R.id.textViewNumRndRotated);
}
private void startAppLogic() {
TextView textViewP = findViewById(R.id.textViewP);
TextView textViewQ = findViewById(R.id.textViewQ);
TextView textViewH = findViewById(R.id.textViewH);
TextView textViewNumRnd = findViewById(R.id.textViewNumRnd);
TextView textViewNumRndRotated = findViewById(R.id.textViewNumRndRotated);
BigInteger p, q, l;
// Проверяем наличие файла digital.bbs
File bbsFile = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS), "digital.bbs");
if (bbsFile.exists()) {
// Читаем значения из файла
try {
FileReader reader = new FileReader(bbsFile);
StringBuilder jsonBuilder = new StringBuilder();
int character;
while ((character = reader.read()) != -1) {
jsonBuilder.append((char) character);
}
reader.close();
JSONObject json = new JSONObject(jsonBuilder.toString());
p = new BigInteger(json.getString("P"));
q = new BigInteger(json.getString("Q"));
l = new BigInteger(json.getString("L"));
textViewP.setText("P (из файла):\n" + p.toString());
textViewQ.setText("Q (из файла):\n" + q.toString());
Toast.makeText(this, "Данные загружены из файла", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(this, "Ошибка чтения файла", Toast.LENGTH_SHORT).show();
isProcessing = false;
return;
}
} else {
// Генерируем новые значения
p = generatePrime();
q = generatePrime();
// Вычисляем M = P * Q
BigInteger m = p.multiply(q);
// Выбираем случайное L, взаимно простое с M
l = generateCoprime(m);
// Сохраняем в файл
saveToFile(p, q, l);
textViewP.setText("P (сгенерировано):\n" + p.toString());
textViewQ.setText("Q (сгенерировано):\n" + q.toString());
Toast.makeText(this, "Новые данные сгенерированы и сохранены", Toast.LENGTH_SHORT).show();
}
// Продолжаем вычисления
try {
// Вычисляем M = P * Q
BigInteger m = p.multiply(q);
// Вычисляем K = L * L
BigInteger k = l.multiply(l);
// Вычисляем H = K mod M
BigInteger h = k.mod(m);
// Генерируем NumRnd с помощью функции DigCreate
BigInteger numRnd = digCreate(h, m);
// Выполняем циклический сдвиг вправо
BigInteger numRndRotated = rotateRightWithParity(numRnd);
// Отображаем оставшиеся числа
textViewH.setText("H = (L? mod M):\n" + h.toString());
textViewNumRnd.setText("NumRnd (" + E + " бит):\n" + numRnd.toString());
textViewNumRndRotated.setText("NumRnd (циклический сдвиг):\n" + numRndRotated.toString());
isProcessing = false;
} catch (Exception e) {
Toast.makeText(this, "Ошибка вычислений: " + e.getMessage(), Toast.LENGTH_SHORT).show();
isProcessing = false;
}
}
private boolean checkStoragePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return Environment.isExternalStorageManager();
} else {
return ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED;
}
}
private void requestStoragePermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
try {
android.content.Intent intent = new android.content.Intent(android.provider.Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(android.net.Uri.parse(String.format("package:%s", getApplicationContext().getPackageName())));
startActivityForResult(intent, STORAGE_PERMISSION_CODE);
} catch (Exception e) {
android.content.Intent intent = new android.content.Intent();
intent.setAction(android.provider.Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
startActivityForResult(intent, STORAGE_PERMISSION_CODE);
}
} else {
ActivityCompat.requestPermissions(this,
new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
},
STORAGE_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
startAppLogic();
} else {
Toast.makeText(this, "Разрешения отклонены", Toast.LENGTH_LONG).show();
isProcessing = false;
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, android.content.Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == STORAGE_PERMISSION_CODE) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
startAppLogic();
} else {
Toast.makeText(this, "Разрешение отклонено", Toast.LENGTH_LONG).show();
isProcessing = false;
}
}
}
}
private void saveToFile(BigInteger p, BigInteger q, BigInteger l) {
try {
JSONObject json = new JSONObject();
json.put("P", p.toString());
json.put("Q", q.toString());
json.put("L", l.toString());
File downloadsDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File bbsFile = new File(downloadsDir, "digital.bbs");
FileWriter writer = new FileWriter(bbsFile);
writer.write(json.toString());
writer.flush();
writer.close();
} catch (Exception e) {
Toast.makeText(this, "Ошибка сохранения файла", Toast.LENGTH_SHORT).show();
}
}
private BigInteger generatePrime() {
Random random = new Random();
while (true) {
BigInteger candidate = new BigInteger(E, random);
if (candidate.mod(BigInteger.valueOf(4)).equals(BigInteger.valueOf(3))) {
if (candidate.isProbablePrime(100)) {
return candidate;
}
}
}
}
private BigInteger generateCoprime(BigInteger m) {
Random random = new Random();
while (true) {
BigInteger l = new BigInteger(E, random);
if (l.gcd(m).equals(BigInteger.ONE)) {
return l;
}
}
}
private BigInteger digCreate(BigInteger initialH, BigInteger m) {
BigInteger h = initialH;
BigInteger numRnd = BigInteger.ZERO;
for (int i = 0; i < E; i++) {
BigInteger n = h.multiply(h).mod(m);
BigInteger lsb = n.and(BigInteger.ONE);
numRnd = numRnd.shiftLeft(1);
numRnd = numRnd.or(lsb);
h = n;
}
return numRnd;
}
private BigInteger rotateRightWithParity(BigInteger num) {
BigInteger lsb = num.and(BigInteger.ONE);
BigInteger shifted = num.shiftRight(1);
BigInteger rotatedLsb = lsb.shiftLeft(E - 1);
return shifted.or(rotatedLsb);
}
}
Подробнее читаем здесь:
AI Powered Code GENERATION >>
AI Powered Code GENERATION
|
|