Найдите 5 чисел, больших 500 000, таких, что среди их делителей есть число, оканчивающееся
Формат вывода: для каждого
Ответ:
| Паскаль |
|---|
var c, d, i : integer; begin c := 0; for i := 500000 to 600000 do begin for d := 18 to (i div 2) do if (i mod d = 0) and (d mod 10 = 8) then begin с := с+1; writeln(i, ' ', d); break; end; if c = 5 then break; end; end. |
| Python |
c = 0 for i in range(500000, 600000): for d in range(18, (i//2 + 1)): if ((i % d) == 0) and ((d % 10) == 8): c += 1 print(i, d) break if c == 5: break |
| С++ |
#include <iostream> #include <cmath> using namespace std; int main(){ int c = 0; for(long int i=500000; i<600000; i++){ for(int d = 18; d <= round(i/2); d++) if(i % d == 0 && d % 10 == 8){ с++; std::cout << i << " " << md << std::endl; break; } if(c == 5) break; } } |
В результате работы программа должна вывести следующее:
500002 178
500004 18
500016 48
500018 58
500020 4348
Приведём решение Артёма Гридина на языке Python.
n = 500000
cnt = 0
while cnt < 5:
for factor in range(18, n//2+1):
if n%factor == 0 and str(factor)[-1] == '8':
print(n, factor)
cnt += 1
break
n += 2
Приведём решение Юлии Леонтьевой на языке Python.
def f(x):
s = []
while x>0:
for i in range(2,int(x**0.5)+1):
if x%i==0:
if i%10==8 and i!=8:
s.append(i)
if x//i!=i and x//i!=8 and (x//i)%10==8:
s.append(x//i)
return s
сount = 0
for x in range(500_001,500_100):
s = f(x)
if len(s)>0:
print(x,min(s))
сount += 1
if сount == 5:
break

