The favourite numbers of Santa Claus
)
75% перевірте чи правильна ваша думка про прості числа -_-
Потрібно просто перебирати числа на проміжку від a до b. Я використовував вкладений оператор if() Перебирати від >9 до <500000.
а що, власне, мається на увазі під числами, "у яких після 1 стоїть 3, тобто утворюється число 13"? для мене це числа виду ?13? де на місці "?" розташовані одна чи декілька цифр, можливо, жодна. якщо це так, то чого зараховано лише 5 тестів? я вивів усі числа до пів мільйона, які програма може врахувати для остаточної відповіді, і серед них не було жодного такого виду (певно, що вони всі ще й прості). натомість усі числа, які одразу пропускаются, бо вони "неулюблені" в Діда Мороза, містять "13" (перевіряв сервісом для пошуку тексту). до речі, я кілька разів послаблював обмеження: ігнорував неулюблені числа 6-значні, 5-значні. врешті-решт програма стала лише саме число 13 опускати, але навіть тоді результат не погіршився й не покращився. невже я довблюся в очі?))
На python цю задачу не розвязати т.к треба створювати список (це необхідно), і цей список весь перебрати (for x in n) і перевірити чи кожне число має 13 і чи є воно просте. Тому це займає більше чим 1 секунду.
c# - 100%
using System; namespace ConsoleApp1 { internal class Program { static void Main() { string n = Console.ReadLine(); string[] arr = n.Split(' '); int a = int.Parse(arr[0]); int b = int.Parse(arr[1]);
int say = 0;
for (int i = a; i <= b; i++)
{
if (i.ToString().IndexOf("13") == -1 && sadeEded(i))
say++;
}
Console.WriteLine(say);
Console.ReadLine();
}
private static bool sadeEded(int n)
{
if (n < 2)
return false;
if (n == 2)
return true;
for (int i = 2; i * i <= n; i++)
{
if (n % i == 0)
return false;
}
return true;
}
}
}
include <bits/stdc++.h>
using namespace std;
bool sadeEded(int n) {
if (n < 2)
return false;
if (n == 2)
return true;
for (int i = 2; i * i <= n; i++) {
if (n % i == 0)
return false;
}
return true;
} int main() {
string n;
getline(std::cin, n);
vector<std::string> arr;
string temp = "";
for (char c : n) {
if (c == ' ') {
arr.push_back(temp);
temp = "";
} else {
temp += c;
}
}
arr.push_back(temp);
int a = stoi(arr[0]);
int b = stoi(arr[1]);
int say = 0;
for (int i = a; i <= b; i++) {
string iStr = to_string(i);
if (iStr.find("13") == string::npos && sadeEded(i))
say++;
}
cout << say << endl;
return 0;
}