Пусть M – сумма делителей, максимально приближенных к квадратному корню числа, не считая единицы и самого числа. Квадратный корень в качестве делителя не рассматривать. Если нет делителей, отличных oт квадратного корня, единицы и самого числа, значение M считается равным 0. Напишите программу, которая перебирает целые числа, большие 710017, в порядке возрастания и ищет среди них такие, для которых значение M кратно 10 и больше M для предыдущего найденного числа.. Вывести первые 5 найденных чисел и соответствующие им значения M.
[boris@fedora33server FORWARD]$ cat dba25160521.py
numbers = []
M=0
for i in range(713000218, 10000000000):
minDiv = 0
for div in range(int(i**0.5),1,-1):
if i % div == 0 and div**2 != i:
minDiv = div
break
if minDiv != 0:
currMV = (i // minDiv) + minDiv
if currMV % 10 == 0 and currMV > M:
numbers.append(i)
print(i,currMV)
M = currMV
if len(numbers) == 100:
break
Проверяем что для первых 5 найденных чисел программы дают те же результаты
[boris@fedora33server FORWARD]$ python dba25160521.py
713000221 67330
713000261 437190
713000269 11688590
713000279 23000040
713000571 237666860
[boris@fedora33server FORWARD]$ ./mainVector1
Input start : 713000218
Input depth : 5
713000221 67330
713000261 437190
713000269 11688590
713000279 23000040
713000571 237666860
#include <iostream>
#include <vector>
#include <cstddef>
#include <cmath>
std::vector<std::vector<int> > resultList(int m, int depth)
{
std::vector<std::vector<int> > vec;
std::vector<int> v1;
int i,j,M,minDiv,currMV,div;
M = 0;
for (int i = m; i < 10000000000 ; i++) {
minDiv = 0;
for (div = (int)sqrt(i); div > 1; div--)
{
if (i%div == 0 && div*div != i)
{
minDiv = div ;
break ;
}
}
if (minDiv != 0)
currMV = (i/minDiv) + minDiv;
if (currMV % 10 == 0 && currMV > M)
{
v1.push_back(i);
v1.push_back(currMV);
vec.push_back(v1);
M = currMV;
while (!v1.empty())
{
v1.pop_back();
}
}
if (vec.size() == depth)
break;
}
return vec;
}
[boris@fedora33server FORWARD]$ cat mainVector1.cpp
#include <iostream>
#include <vector>
#include <cstddef>
std::vector<std::vector<int> > resultList(int m,int n);
int main()
{
int m,n;
std::cout << " Input start : ";
std::cin >> m ;
std::cout << " Input depth : ";
std::cin >> n ;
std::vector<std::vector<int> > rez = resultList(m,n);
// Displaying the 2D vector
for (int i = 0; i < rez.size(); i++) {
for (int j = 0; j < rez[i].size(); j++)
std::cout << rez[i][j] << " ";
std::cout << std::endl;
}
}
Compilation via g++ on Fedora Linux 34
No comments:
Post a Comment