C/C++

Написать на C++. Сириус курсы

Минимальный простой делитель
Дано целое число, не меньшее 2. Выведите его наименьший простой делитель.

Входные данные

Вводится целое положительное число N≤2∗109.
Диплом курса не нужен? Могу продать и тебе проще будет.
Владимир Бахишев
Владимир Бахишев
90 486
Лучший ответ
Владимир .... да код нужен ёмае
#include <cmath>
#include <iostream>
using namespace std;
int main()
{
int k, l = 1, m, n;
cout << "n: ";
cin >> n;
if (n == 2 || n == 3) cout << n; else
{
if (n % 2 == 0) cout << 2; else
{
m = ceil(sqrt(n));
for (k = 3; k <= m; k += 2)
if (n % k == 0)
{
l = 0;
cout << k;
break;
}
if (l) cout << n;
}
}
cout << endl;
}
Тут логика простая: если вводится n=2 или 3, то n и выдаётся, так как это простые числа, в противном случае если введённое число чётное, то сразу выдаётся 2, иначе в цикле последовательно в порядке возрастания проверяются все нечётные числа от 3 до √n и если n кратно первому из них, то оно, это первое число, и выдаётся, а цикл немедленно прекращается, а если n не кратно ни одному из этих чисел, тогда выдаётся n, так как оно простое.
примерно так while (i <= sqrt(n)) if (n % ++i == 0) { n = i; break;}cout n;
Алексей Крянин
Алексей Крянин
25 445
Владимир .... можно весь код?)
#include <iostream>
using namespace std;
int main()
{
int min1, min2, now;
cin >> min1 >> min2;
if (min1 > min2){
now = min1;
min1 = min2;
min2 = now;
}
cin >> now;
while (now > 0){
if (now < min1){
min2 = min1;
min1 = now;
}else if (now < min2){
min2 = now;
}
cin >> now;
}
cout << min2 << endl;
return 0;
}
ПРОВЕРЕНО СИРИУСОМ
#include <iostream>
using namespace std;

bool is_prime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i * i <= n; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}

int main() {
int n;
cin >> n;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0 && is_prime(i)) {
cout << i << endl;
return 0;
}
}
cout << n << endl;
return 0;
}
Shukhrat Sidikov
Shukhrat Sidikov
126