Y3. Вложенные циклы и целые числа

Напишите в комментариях к этой записи консольные приложения для решения этих задач, укажите также код и условие задачи.

Внимание! Под делителями целого числа n (n > 1) в нижеследующих задачах следует понимать простые числа (в смысле основной теоремы арифметики, n не равно 1). Например: 12=2*2*3, 27 = 3*3*3, 205=5*41 (составные числа), 257=257 (простое число, без сомножителя 1). Если n=1, то считать, что один делитель = 1.

Решены задачи 1-3, 7, 10, 18, 21.

Задачи

Y3.1. Найти количество делителей каждого из целых чисел от 120 до 140.
Y3.2. Составить программу для графического изображения делимости чисел от 1 до n (значение n вводится с клавиатуры). В каждой строке надо напечатать очередное число и столько символов «+», сколько делителей у этого числа. Например, если n = 4, то на экране должно быть напечатано:
1+
2++
3++
4+++
Y3.3. Найти все целые числа из промежутка от 1 до 300, у которых ровно пять делителей.
Y3.4. Найти все целые числа из промежутка от 200 до 500, у которых ровно шесть делителей.
Y3.5. Найти все целые числа из промежутка от a до b, у которых количество делителей равно k.
Y3.6. Найти натуральное число из интервала от a до b, у которого количество делителей максимально. Если таких чисел несколько, то должно быть найдено:
а) максимальное из них;
б) минимальное из них.
Y3.7. Найти все трехзначные простые числа (простым называется натуральное число, большее 1, не имеющее других делителей, кроме единицы и самого себя).
Y3.8. Найти 100 первых простых чисел.
Y3.9. Найти сумму делителей каждого из целых чисел от 50 до 70.
Y3.10. Найти все целые числа из промежутка от 100 до 300, у которых сумма делителей равна 50.
Y3.11. Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10.
Y3.12. Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и, естественно, исключая это самое число. Например, совершенным является число 6 ( 6 1 2 3 ). Найти все совершенные числа, меньшие 100 000.
Y3.13. Найти натуральное число из интервала от a до b с максимальной суммой делителей.
Y3.14. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается). Найти все пары натуральных дружественных чисел, меньших 50 000.
Y3.15. Найти размеры всех прямоугольников, площадь которых равна заданному натуральному числу s и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров сторон:
а) считать разными;
б) считать совпадающими.
Y3.16. Найти размеры всех прямоугольных параллелепипедов, объем которых равен заданному натуральному числу v и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров ребер параллелепипеда:
а) считать разными;
б) считать совпадающими.
Y3.17. Составить программу для нахождения всех натуральных решений (x и y) уравнения x2 + y2 = k2, где x, y и k лежат в интервале от 1 до 30. Решения, которые получаются перестановкой x и y, считать совпадающими.
Y3.18. Даны натуральные числа m и n. Вычислить 1n + 2n + … + mn.
Y3.19. Дано натуральное число n. Вычислить 11 + 22 + … + nn.
Y3.20. Дано натуральное число n (n ≤ 27). Найти все трехзначные числа, сумма цифр которых равна n. Операции деления, целочисленного деления и определения остатка не использовать.
Y3.21. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. Операции деления, целочисленного деления и определения остатка не использовать.
Y3.22. Даны n натуральных чисел. Найти их наибольший общий делитель, используя алгоритм Евклида и учитывая, что НОД(a, b, c) = НОД(НОД(a, b), c).
Y3.23. Имеются 10 гирь весом 100, 200, 300, 500, 1000, 1200, 1400, 1500, 2000 и 3000 г. Сколькими способами гирями этого набора можно составить вес в V грамм.
Y3.24. Дано натуральное число n (n < 100).
а) Определить число способов выплаты суммы n рублей с помощью монет достоинством 1, 2, 5 рублей и бумажных купюр достоинством 10 рублей.
б) Получить все способы выплаты (указать, какие монеты и купюры и в каком количестве следует использовать).
Y3.25. Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m.
Y3.26. В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить суммы n, n + 1, …, n + 10 (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.
Y3.27. Составить программу нахождения цифрового корня натурального числа. Цифровой корень данного числа получается следующим образом. Если сложить все цифры этого числа, затем все цифры найденной суммы и повторять этот процесс, то в результате будет получено однозначное число (цифра), которая и называется цифровым корнем данного числа.
Y3.28. Старинная задача. Имеется 100 рублей. Сколько быков, коров и телят можно купить на все эти деньги, если плата за быка — 10 рублей, за корову — 5 рублей, за теленка — полтинник (0,5 рубля) и надо купить 100 голов скота?
Y3.29. Дано натуральное число n. Напечатать разложение этого числа на простые множители. Реализовать два варианта:
1) каждый простой множитель должен быть напечатан один раз;
2) каждый простой множитель должен быть напечатан столько раз, сколько раз он входит в разложение.
Y3.30. Дано натуральное число n. Получить все простые делители этого числа.
Y3.31. Дано натуральное число n. Получить все натуральные числа, меньшие n и взаимно простые с ним (два натуральных числа называются взаимно простыми, если их наибольший общий делитель равен 1).
Y3.32. Даны целые числа n и m. Получить все натуральные числа, меньшие n и взаимно простые с p.
Y3.33. Даны целые числа p и q. Получить все делители числа q, взаимно простые с p.
Y3.34. Найти наименьшее натуральное число n, которое можно представить двумя различными способами в виде суммы кубов двух натуральных чисел.
Y3.35. Найти все простые несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7 (дробь задается двумя натуральными числами — числителем и знаменателем).


NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.


Понравилась статья? Поделиться с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о

95 комментариев
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Y3.35
for (float denominator = 1; denominator < 8; denominator++)
{
for (float numerator = 0; numerator < 8; numerator++)
{
if (numerator == denominator) break;
float x = numerator / denominator;
Console.WriteLine(x);
}
}

А почему используется float? Тут вполне достаточно int. Float очень «коварный» тип и нужно использовать его с осторожностью.

Y3.3
static void Main(string[] args)
{
  ArrayList div = new ArrayList();
  for (int i=1; i<=300;i++)
  {
    int k=0;
    for (int j = 1; j/2 <= i; j++)
    {
      if (k > 5) { break; }
      if(i%j==0) {k++;}  
    }
    if (k==5) { div.Add(i); }
  }
  foreach(int i in div) { Console.WriteLine(i + » «); }
  Console.ReadLine();
}

Все правильно. Но есть пара замечаний. Во-первых, ArrayList устаревший класс и сейчас его не рекомендуется применять, лучше использовать List. А во-вторых вложенный цикл можно начинать с 2 т.к. на 1 делятся все числа.

Y3.6
using System;
namespace Program
{
class Program
{
static void Main()
{
int a, b;
int m = 1;
int min = 0, max = 0;
int n = 0;
Console.Write(«Zadaite diapazon ot «);
a = Convert.ToInt32(Console.ReadLine());
Console.Write(» do «);
b = Convert.ToInt32(Console.ReadLine());
for (int i = a; i<=b; i++)
{

for (int j = a; j m)
{
m = n;
min = i;
}
else if (n == m)
{
max = i;
}
n = 0;
}
Console.WriteLine(«Chisla s naibolshim kolichestvom delitelei Max {0} i Min {1}», max, min);
}
}
}

Y3. Вложенные циклы и целые числаЧасть 1

using System;
//Y3. Вложенные циклы и целые числа
namespace Y3
{
    class Program
    {
        static int Input(string Name, int Min = int.MinValue, int Max = int.MaxValue)
        {
            int Num;
            Console.WriteLine($"Введите {Name}: ");
            while (!(int.TryParse(Console.ReadLine(), out Num) && Num >= Min && Num <= Max))
                Console.WriteLine($"Введено неверное значение, введите {Name}: ") ;
            return Num;
        }
        static bool TrySimple (int Num)
        {
            bool BSilmpe = true;
            for (int a = 2; a <= Math.Sqrt(Num); a++)
            {
                if (Num % a == 0) BSilmpe = false;
            }
            return BSilmpe;
        }
        static void Main()
        {
            Random Rand = new Random();
            //Y3.1
            Console.WriteLine("Y3.1. Найти количество делителей каждого из целых чисел от 120 до 140.");
            for (int a = 120; a <= 140; a++)
            {
                Console.Write($"Число {a}, делители: ");
                int N1denomCount = 0;
                for (int b = 2; b < a; b++)
                {
                    if (a % b == 0)
                    {
                        bool B1simpleNum = true;
                        for (int c=2;c <= Math.Sqrt(b); c++)
                        {
                            if (b % c == 0) B1simpleNum = false;
                        }
                        if (B1simpleNum)
                        {
                            N1denomCount++;
                            Console.Write(b + " ");
                        }
                    }
                }
                Console.WriteLine(N1denomCount > 0 ? $"\tвсего делителей - {N1denomCount}" : $"нет, это простое число") ;
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.2
            Console.WriteLine("Y3.2. Составить программу для графического изображения делимости чисел от 1 до n (значение n вводится с клавиатуры). В каждой строке надо напечатать очередное число и столько символов «+», сколько делителей у этого числа.");
            int N2n = Input("число n");
            for (int a = 1; a <= N2n; a++)
            {
                Console.Write("\n"+a);
                for (int b = 1; b <= a; b++)
                {
                    if (a % b == 0)
                    {
                        bool B2simple = true;
                        for (int c = 2; c < Math.Sqrt(b); c++)
                        {
                            if (b % c == 0) B2simple = false;
                        }
                        if (B2simple) Console.Write("+");
                    }
                }
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.3
            Console.WriteLine("Y3.3. Найти все целые числа из промежутка от 1 до 300, у которых ровно пять делителей.");
            for (int a = 1; a <= 300; a++)
            {
                int N3denomCount = 0;
                for (int b = 2; b <= a/2; b++)
                {
                    if (a % b == 0)
                    {
                        bool B3simple = true;
                        for (int c = 2; c <= Math.Sqrt(b); c++)
                        {
                            if (b % c == 0) B3simple = false;
                        }
                        if (B3simple) N3denomCount++;
                    }
                }
                if (N3denomCount == 4) Console.Write(a + " ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.4
            Console.WriteLine("Y3.4. Найти все целые числа из промежутка от 200 до 500, у которых ровно шесть делителей.");
            for (int a = 200; a <= 500; a++)
            {
                int DenominatorCount = 0;
                for (int b = 2; b < a; b++)
                {
                    if (a % b == 0)
                        if (TrySimple(b))
                            DenominatorCount++;
                }
                if (DenominatorCount == 4 ) Console.Write(a + " ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.5
            Console.WriteLine("Y3.5. Найти все целые числа из промежутка от a до b, у которых количество делителей равно k.");
            int N5A = Input("число A");
            int N5B = Input("число B");
            int N5K = Input("число K");
            for (int a = N5A; a <= N5B; a++)
            {
                int DenominatorCount = 0;
                for (int b = 2; b <= a / 2; b++)
                {
                    if (a % b == 0)
                        if (TrySimple(b))
                            DenominatorCount++;
                }
                if (DenominatorCount == N5K)
                    Console.Write(a + " ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.6
            Console.WriteLine("Y3.6. Найти натуральное число из интервала от a до b, у которого количество делителей максимально. Если таких чисел несколько, то должно быть найдено:\nа) максимальное из них;\nб) минимальное из них.");
            int N6A = Input("число А");
            int N6B = Input("число B");
            int N6MaxDenomCount = 0;
            int N6Max = 0;
            int N6Min = 0;
            for (int a = N6A; a <= N6B; a++)
            {
                int N6MaxDenomCurrent = 0;
                for (int b = 2; b <= a; b++)
                {
                    if (a % b == 0)
                        if (TrySimple(b))
                            N6MaxDenomCurrent++;
                }
                if (N6MaxDenomCount < N6MaxDenomCurrent)
                {
                    N6Min = a;
                    N6MaxDenomCount = N6MaxDenomCurrent;
                }
                if (N6MaxDenomCount <= N6MaxDenomCurrent)
                {
                    N6Max = a;
                    N6MaxDenomCount = N6MaxDenomCurrent;
                }
            }
            Console.WriteLine($"{N6MaxDenomCount}: {N6Min} {N6Max}") ;
            Console.ReadKey();
            Console.Clear();
            //Y3.7
            Console.WriteLine("Y3.7. Найти все трехзначные простые числа (простым называется натуральное число, большее 1, не имеющее других делителей, кроме единицы и самого себя).");
            for (int a = 100; a <= 999; a++)
                if (TrySimple(a))
                    Console.Write(a + " ");
            Console.ReadKey();
            Console.Clear();
            //Y3.8
            Console.WriteLine("Y3.8. Найти 100 первых простых чисел.");
            int N8countSimple = 0;
            for (int a = 2; N8countSimple <= 100; a++)
            {
                bool simple = true;
                for (int b = 2; b <= Math.Sqrt(a); b++)
                {
                    if (a % b == 0)
                        simple = false;
                }
                if (simple)
                {
                    Console.Write(a + " ");
                    N8countSimple++;
                }
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.9
            Console.WriteLine("Y3.9. Найти сумму делителей каждого из целых чисел от 50 до 70.");
            for (int a = 50; a <= 70; a++)
            {
                int N9sum = 0;
                for (int b = 2; b < a ; b++)
                {
                    if (a % b == 0)
                    {
                        if (TrySimple(b))
                            N9sum += b;
                    }
                }
                Console.WriteLine(N9sum);
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.10
            Console.WriteLine("Y3.10. Найти все целые числа из промежутка от 100 до 300, у которых сумма делителей равна 50.");
            for (int a = 100; a <= 300; a++)
            {
                int sumDenominator = 0;
                for (int b = 2; b < a; b++)
                {
                    if (a % b == 0)
                        if (TrySimple(b))
                            sumDenominator += b;
                }
                if (sumDenominator == 50)
                    Console.Write(a + " ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.11
            Console.WriteLine("Y3.11. Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10.");
            for (int a = 300; a <= 600; a++)
            {
                int sumDenominator = 0;
                for (int b = 2; b < a; b++)
                    if (a % b == 0)
                        if (TrySimple(b))
                            sumDenominator += b;
                if (sumDenominator > 0 && sumDenominator % 10 == 0) Console.Write(a+" ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.12
            Console.WriteLine("Y3.12. Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и, естественно, исключая это самое число. Например, совершенным является число 6 ( 6 1 2 3 ). Найти все совершенные числа, меньшие 100 000.");
            for (int a = 1; a <= 100000; a++)
            {
                int sumDenom = 0;
                for (int b = 1; b < a ; b++)
                    if (a % b == 0)
                        sumDenom += b;
                if (a == sumDenom) Console.Write(a+" ");
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.13
            Console.WriteLine("Y3.13. Найти натуральное число из интервала от a до b с максимальной суммой делителей.");
            int N13A = Input("число A");
            int N13B = Input("число B");
            int N13sumMax=0;
            int N13max = 0;
            for (int a = N13A; a <= N13B; a++)
            {
                int sumDenom = 0;
                for (int b = 2; b < a; b++)
                    if (a % b == 0)
                        if (TrySimple(b))
                            sumDenom += b;
                if (N13sumMax < sumDenom)
                {
                    N13sumMax = sumDenom;
                    N13max = a;
                }
            }
            Console.WriteLine($"{N13max}:{N13sumMax}");
            Console.ReadKey();
            Console.Clear();
            //Y3.14
            Console.WriteLine("Y3.14. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается). Найти все пары натуральных дружественных чисел, меньших 50 000.");
            for (int a = 1; a<=5000; a++)
            {
                int sumDenomA = 0;
                for (int aDenom = 1; aDenom < a; aDenom++)
                    if (a % aDenom == 0)
                        sumDenomA += aDenom;
                for (int b = 1; b <= a; b++)
                {
                    int sumDenomB = 0;
                    for (int bDenom = 1; bDenom < b; bDenom++)
                        if (b % bDenom == 0)
                            sumDenomB += bDenom;
                    if (a != b && a == sumDenomB && b == sumDenomA)
                        Console.WriteLine($"{a}:{b}");
                }
            }
            Console.ReadKey();
            Console.Clear();
            //Y3.15
            Console.WriteLine("Y3.15. Найти размеры всех прямоугольников, площадь которых равна заданному натуральному числу s и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров сторон:\nа) считать разными;\nб) считать совпадающими.");
            int N15area = Input("Площадь прямоугольника");
            for (int a = 1; a <= N15area; a++)
                for (int b = 1; b <= N15area; b++)
                    if (a * b == N15area)
                        Console.WriteLine($"{a}:{b}");
            Console.ReadKey();
            Console.Clear();
            for (int a = 1; a <= Math.Sqrt(N15area); a++)
                for (int b = 1; b <= N15area; b++)
                    if (a * b == N15area)
                        Console.WriteLine($"{a}:{b}");
            Console.ReadKey();
            Console.Clear();
            //Y3.16
            Console.WriteLine("Y3.16. Найти размеры всех прямоугольных параллелепипедов, объем которых равен заданному натуральному числу v и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров ребер параллелепипеда:\nа) считать разными;\nб) считать совпадающими.");
            int N16volume = Input("объем паралеллепипеда");
            for (int a = 1; a < N16volume; a++)
                for (int b = 1; b < N16volume; b++)
                    for (int c = 1; c < N16volume; c++)
                        if (a * b * c == N16volume)
                            Console.WriteLine($"{a}:{b}:{c}");
            Console.ReadKey();
            Console.Clear();
            for (int a = 1; a <= N16volume; a++)
                for (int b = a; b <= N16volume; b++)
                    for (int c = b; c < N16volume; c++)
                        if (a * b * c == N16volume)
                            Console.WriteLine($"{a}:{b}:{c}");
            Console.ReadKey();
            Console.Clear();
            //Y3.17
            Console.WriteLine("Y3.17. Составить программу для нахождения всех натуральных решений (x и y) уравнения x2 + y2 = k2, где x, y и k лежат в интервале от 1 до 30. Решения, которые получаются перестановкой x и y, считать совпадающими.");
            for (int x = 1; x <= 30; x++)
                for (int y = x; y <= 30; y++)
                {
                    double k = (x * x) + (y * y);
                    if ((Math.Sqrt(k) * 10) % 10 == 0)
                        Console.WriteLine($"{x}^2+{y}^2={Math.Sqrt(k)}^2");
                }
            Console.ReadKey();
            Console.Clear();
            //Y3.18
            Console.WriteLine("Y3.18. Даны натуральные числа m и n. Вычислить 1n + 2n + … + mn.");
            int N18m = Input("число m");
            int N18n = Input("число n");
            int N18sum=0;
            for (int a = 1; a <= N18m; a++)
                N18sum += (int)Math.Pow(a,N18n);
            Console.WriteLine(N18sum);
            Console.ReadKey();
            Console.Clear();
            //Y3.19
            Console.WriteLine("Y3.19. Дано натуральное число n. Вычислить 11 + 22 + … + nn.");
            int N19n = Input("число n");
            long N19sum = 0;
            for (int a = 1; a <= N19n; a++)
                N19sum += (long)Math.Pow(a,a);
            Console.WriteLine(N19sum);
            Console.ReadKey();
            Console.Clear();

Y3.6. Найти натуральное число из интервала от a до b, у которого количество делителей максимально. Если таких чисел несколько, то должно быть найдено:
а) максимальное из них;
б) минимальное из них.

Фуф, пришлось нормально так посидеть за этой задачкой, которую, видимо, все скипали:) Только не кидайтесь камнями за «maxNumbers[maxNumbers.Count — 1]». Я знаю, что можно написать короче, но из за версии C# не получилось.

namespace Examples
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("От");
            int start = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine("До");
            int end = Convert.ToInt32(Console.ReadLine());
            int maxCounter = 0;
            List<int> maxNumbers = new List<int>();


            for( ; start <= end; start++)
            {
                int counter = 0;
                for (int x = 1; x <= start; x++)
                {
                    if (start % x == 0)
                    {
                        counter++;
                        if (counter > maxCounter)
                        {
                            maxCounter = counter;
                            maxNumbers.Clear();
                            maxNumbers.Add(start);
                        }
                        else if (counter == maxCounter)
                            maxNumbers.Add(start);
                    }
                }
            }


            if(maxNumbers.Count > 1)
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine($"Максимальное количество делителей - {maxCounter}. Это следующие числа:");
                Console.ForegroundColor = ConsoleColor.Gray;
                foreach (int num in maxNumbers)
                {
                    Console.WriteLine(num);
                }
                Console.ForegroundColor = ConsoleColor.Green;
                Console.WriteLine($"Меньшее число - {maxNumbers[0]}");
                Console.WriteLine($"Большее число - {maxNumbers[maxNumbers.Count - 1]}");
                Console.ForegroundColor = ConsoleColor.Gray;
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.Cyan;
                Console.WriteLine($"Максимальное количество делителей у числа {maxNumbers[0]} - {maxCounter} штук");
                Console.ForegroundColor = ConsoleColor.Gray;
            }

            Console.ReadKey();
        }
    }
}

Y3.24. Дано натуральное число n (n < 100).
а) Определить число способов выплаты суммы n рублей с помощью монет достоинством 1, 2, 5 рублей и бумажных купюр достоинством 10 рублей.
б) Получить все способы выплаты (указать, какие монеты и купюры и в каком количестве следует использовать).

static void Main(string[] args)
        {
            Console.WriteLine($"Введите сколько денег нужно разменять: ");
            int money = Convert.ToInt32(Console.ReadLine());
            int count = 0;
            for (int i = 0; i <= money; i++)
            {
                for (int j = 0; j <= money; j++)
                {
                    for (int k = 0; k <= money; k++)
                    {
                        for (int l = 0; l <= money; l++)
                        {
                            if (i * 10 + j * 5 + k * 2 + l == money)
                            {
                                Console.WriteLine($"{i}*10 + {j}*5 + {k}*2 + {l} = {money}");
                                count++;
                            }
                        }
                    }
                }    
            }
            Console.WriteLine(count);
}

  Как то так вышло, тут решение и а и б вопроса.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;


namespace ConsoleApp13
{
    class Program
    {
        static void Main(string[] args)
        {
            int k = 0;
            int[] array1 = new int[300]; // Если требуется изменить проверяемый интервал, меняяте во всех массивах число 300 на любое.
            int[] array2 = new int[300];
            int[] array3 = new int[300];
            decimal[] arr1 = new decimal[300];
            decimal[] arr2 = new decimal[300];
            decimal[] arr3 = new decimal[300];
            for (int i = 1; i < array1.Length; ++i)
            {
                array1[i] = i; // присвоение первой 
                array2[i] = i;
                arr1[i] = i;
                arr2[i] = i;
                //WriteLine($"{array1[i]} {array2[i]} {arr1[i]} {arr2[i]}");
            }
            for (int y = 1; y < array1.Length; ++y)
            {
                array1[y] = y; // присвоение первой 
                array2[y] = y;
                arr1[y] = y;
                arr2[y] = y;
                for (int z = 1; z <= y; z++)
                {
                    arr3[y] = arr1[y] / arr2[z];
                    array3[y] = array1[y] / array2[z];
                    if (array3[y] == arr3[y])
                    {
                        
                       // WriteLine("делится нацело");
                        k = k+1;
                    }                  
                }
                if (k == 5) // Если требуется изменить колличество проверок на деление, меняете K 
                {
                    WriteLine($"{y}");


                }
                k = 0;
            }         
            ReadLine();
        }


    }
}


Y 3.3 решение. Так же функционал программы позваляет легко добавить функционал ввода с клавиатуры всего двух переменных для проверки любых чисел на любое колличество делений нацело.

Последний раз редактировалось 2 лет назад Андрей ем

хотел сделать с помощью массивов но выводится одни 0
то-есть в массиве были 0
кто то может обьяснить?

Найти все целые числа из промежутка от 300 до 600, у которых сумма делителей кратна 10.

< static void Main(string[] args)
    {
      List<int> list = new List<int>();
      int a,b,c;
      a = 300;
      b = 600;
      c = 1;
      int result = 0;

      for (; a <= b;a++) 
      {
        for (; c <= a;c++)
        {
          if (a % c == 0)
          {
            result += c;
          }
        }
        list.Add(result);
        result = 0;
        c = 1;
      }

       

      for (int i = 0; i < list.Count; i++)
      {
        if (list[i] % 10 == 0)
        {
          Console.Write(list[i] + » «);
        }
      }

      Console.ReadLine();
    }/>

Y3.8. Найти 100 первых простых чисел.

static void Main(string[] args)
        {
            int isPrimeNumber = 0;
            int count = 0;
            while(count<100)
            {
                isPrimeNumber++;
                int divider = 0;
                for(int i=1; i< isPrimeNumber; i++)
                {
                    if(isPrimeNumber % i==0)
                    {
                        divider++;
                    }
                }
                if(divider == 1 || divider == 2)
                {
                    Console.WriteLine(isPrimeNumber);
                    count++;
                }
            }

Алексей В, хорошо, но можно значительно упростить алгоритм:

  • нужно ли считать делители?
  • названия переменных divider, isPrimeNumber, i только путают, они не значат того, как называются
  • цикл вайл можно заменить на фор и упростить алгоритм
  • нужно ли начинать внешний цикл с 1?
  • нужно ли цикл перебора делителей начинать с 1?

Решение не верно. Выходят лишние цифры

Мой вариант.

int num = 0;
for (int i = 2; i <= 100; i++)
{
  for (int j = 1; j <= i / 2; j++)
  {
    if (i % j == 0)
    { num++; }
     
  }
  if (num == 1)
  {
    Console.WriteLine(i);
  }
  num = 0;  
}

Y3.33. Даны целые числа p и q. Получить все делители числа q, взаимно простые с p.

static int Evklid(int a, int b)
    {
        while (a != b)
        {
            if (a > b)
            {
                a -= b;
            }
            else
            {
                b -= a;
            }
        }
        return b;
    }
    static void Main()
    {
        int p = 28;
        int q = 17;

        if (p < 1 || q <= 1)
        {
            Console.WriteLine("Значение неверно!!!");
        }

        for (int i = 1; i < q; i++)
        {
            if (q % i == 0 && Evklid(i, p) == 1)
            {
                Console.WriteLine("Взаимно простые: " + p + " " + i);
            }
        }
    }

Y3.32. Даны целые числа n и m. Получить все натуральные числа, меньшие n и взаимно простые с p.

static int Evklid(int a, int b)
    {
        while (a != b)
        {
            if (a > b)
            {
                a -= b;
            }
            else
            {
                b -= a;
            }
        }
        return b;
    }
    static void Main()
    {
        int n = 9;
        int p = 8;

        if (n <= 1 || p <= 1)
        {
            Console.WriteLine("Значение неверно!!!");
        }

        for (int i = 1; i < n; i++)
        {
            if (Evklid(p, i) == 1)
            {
                Console.WriteLine("Взаимно простые: " + p + " " + i);
            }
        }
    }

Y3.31. Дано натуральное число n. Получить все натуральные числа, меньшие n и взаимно простые с ним (два натуральных числа называются взаимно простыми, если их наибольший общий делитель равен 1).

static int Evklid(int a, int b)
    {
        while ( a != b)
        {
            if (a > b)
            {
                a -= b;
            }
            else
            {
                b -= a;
            }
        }
        return b;
    }
    static void Main()
    {
        int n = 65;

        if (n <= 1)
        {
            Console.WriteLine("Значение неверно!!!");
        }

        for (int i = 1; i < n; i++)
        {
            if (Evklid(n, i) == 1)
            {
                Console.WriteLine("Взаимно простые: " + n + " " + i);
            }
        }
    }

Y3.30. Дано натуральное число n. Получить все простые делители этого числа.
Скобки pre /pre не работают !!!

static bool proverka(int num)
    {
        for (int i = 2; i <= num/2; i++)
        {
            if (num % i == 0)
            {
                return false;
            }
        }
        return true;
    }
    static void Main()
    {
        int n = 60;

        for (int i = 2; i <= n; i++)
        {
            if (n % i == 0 && proverka(i))
            {
                Console.WriteLine(i);
            }
        }
    }

Y3.29. Дано натуральное число n. Напечатать разложение этого числа на простые множители. Реализовать два варианта:
1) каждый простой множитель должен быть напечатан один раз;

static int[] del(int[] numbers)
    {
        for (int i = 2; i  1)
        {
            Console.Write($"Простые множители числа {n} : ");
        }
        else
        {
            Console.WriteLine("Значение неверно !");
        }
        
        while (array[0] != 1 && n > 1)
        {
            array = del(array);
        }
        Console.WriteLine();
    }

2) каждый простой множитель должен быть напечатан столько раз, сколько раз он входит в разложение.


static int del(int number)
    {
        for (int i = 2; i  1)
        {
            Console.Write($"Простые множители числа {n} : ");
        }
        else
        {
            Console.WriteLine("Значение неверно !");
        }

        while (n > 1)
        {
            n = del(n);
        }
        Console.WriteLine();
    }

Y3.28. Старинная задача. Имеется 100 рублей. Сколько быков, коров и телят можно купить на все эти деньги, если плата за быка — 10 рублей, за корову — 5 рублей, за теленка — полтинник (0,5 рубля) и надо купить 100 голов скота?

static void Main()
    {
        int t;

        for (int b = 0; b < 10; b++)
        {
            for (int k = 0; k < 20; k++)
            {
                t = 100 - (b + k);
                if (20*b+10*k+t == 200)
                {
                    Console.WriteLine("Быков " + b);
                    Console.WriteLine("Коров " + k);
                    Console.WriteLine("Телят " + t);
                }
            }
        }
    }

Y3.27. Составить программу нахождения цифрового корня натурального числа. Цифровой корень данного числа получается следующим образом. Если сложить все цифры этого числа, затем все цифры найденной суммы и повторять этот процесс, то в результате будет получено однозначное число (цифра), которая и называется цифровым корнем данного числа.

static int rt (int n)
    {
        int summ = 0;
        while (n != 0)
        {
            summ += n % 10;
            n /= 10;
        }
        return summ;
    }
    static void Main()
    {
        int n = 56;

        while (n > 9)
        {
            n = rt(n);
        }

        Console.WriteLine(n);
    }

Y3.26. В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. Дано натуральное число n. Как наименьшим количеством таких денежных купюр можно выплатить суммы n, n + 1, …, n + 10 (указать количество каждой из используемых для выплаты купюр)? Предполагается, что имеется достаточно большое количество купюр всех достоинств.

static void Main()
    {
        int n = 69;
        int m;
        for (m = 64; m > 0; m /= 2)
        {
            if (n / m != 0)
            {
                int count = n / m;
                Console.Write($"{m} - {count}\n");
                n %= m;
            }
        }
    }

Y3.25. Даны натуральные числа m и n. Получить все натуральные числа, меньшие n, квадрат суммы цифр которых равен m.

static void Main()
    {
        int n = 20;
        int m = 25;

        for (int i = 1; i  0)
            {
                s += j % 10;
                j /= 10;
            }
            if (Math.Pow(s, 2) == m)
            {
                Console.WriteLine(i);
            }
        }
    }

Напишите пожалуйста, когда почините тег

Y3.22. Даны n натуральных чисел. Найти их наибольший общий делитель, используя алгоритм Евклида и учитывая, что НОД(a, b, c) = НОД(НОД(a, b), c).

static int NOD(int a, int b)
    {
        if (a > 0 && b > 0)
        {
            while (a != 0 && b != 0)
            {
                if (a > b)
                {
                    a %= b;
                }
                else
                {
                    b %= a;
                }
            }
            return a + b;
        }
        else
        {
            return 1;
        }
    }

    static void Main()
    {
        int a = 12;
        int b = 8;
        int c = 4;

        Console.WriteLine(NOD(NOD(a,b),c));
    }

Y3.21. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. Операции деления, целочисленного деления и определения остатка не использовать.

    static void Main()
    {
        for (int i = 1; i <= 9; i++)
        {
            for (int j = 0; j <= 9; j++)
            {
                    for (int k = 0; k <= 9; k++)
                    {
                        if (j != k && k != i && i != j)
                        {
                            Console.WriteLine($"{i}{j}{k}");
                        }
                    }
            }
        }
    }

Y3.20. Дано натуральное число n (n ≤ 27). Найти все трехзначные числа, сумма цифр которых равна n. Операции деления, целочисленного деления и определения остатка не использовать.

int n = 26;

        if (n  27)
        {
            Console.WriteLine("Неверное значение");
        }
        
        for (int i = 1; i  0 && n < 28; i++)
        {
            for (int j = 0; j <=9; j++)
            {
                for (int k = 0; k <=9; k++)
                {
                    if (i + j + k == n)
                    {
                        Console.WriteLine($"Числа: {i}{j}{k}");
                    }
                }
            }
        }

Да, здесь это явно лишнее.

Y3.19. Дано натуральное число n. Вычислить 11 + 22 + … + nn.

static void Main()
    {
        int n = 3;
        int summ = 0;

        if (n < 1)
        {
            Console.WriteLine("Неверное значение");
        }

        for (int i = 1; i <= n; i++)
        {
            int number = i;
            for (int j = 1; j < i; j++)
            {
                number *= i;
            }
            summ += number;
        }
        Console.WriteLine(summ);
    }

Исправил

static void Main()
    {
        int n = 3;
        double summ = 0;

        if (n < 1)
        {
            Console.WriteLine("Неверное значение");
        }

        for (int i = 1; i <= n; i++)
        {
            summ += Math.Pow(i, i);
        }
        Console.WriteLine(summ);
    }

Y3.18. Даны натуральные числа m и n. Вычислить 1n + 2n + … + mn.

static void Main()
    {
        int m = 5;
        int n = 5;
        int summ = 0;

        if (m < 1 || n < 1)
        {
            Console.WriteLine("Неверное значение");
        }

        for (int i = 1; i  0; i++)
        {
            int number = i;
            for (int j = 1; j < n; j++)
            {
                number *= i;
            }
            summ += number;
        }

        Console.WriteLine(summ);
    }

Исправил.

static void Main()
    {
        int m = 5;
        int n = 2;
        double summ = 0;

        if (m < 1 || n < 1)
        {
            Console.WriteLine("Неверное значение");
        }

        for (int i = 1; i  0; i++)
        {
            summ += Math.Pow(i, n);
        }

        Console.WriteLine(summ);
    }

Из за того что оформление кода не работает «pre», код отображается некорректно …

Y3.17. Составить программу для нахождения всех натуральных решений (x и y) уравнения x2 + y2 = k2, где x, y и k лежат в интервале от 1 до 30. Решения, которые получаются перестановкой x и y, считать совпадающими.

static void Main()
    {
        int x = 1;
        int y = 1;
        int k = 20;

        if ( (k  30) || (y  30) || (x  30))
        {
            Console.WriteLine("Неверное значение");
        }

        for (int x1 = x; x1 <= k; x1++)
        {
            for (int y1 = y; y1 <= k; y1++)
            {
                if (Math.Pow(x1, 2) * Math.Pow(y1, 2) == Math.Pow(k, 2))
                {
                    Console.WriteLine($"{x1} {y1}");
                }
            }
        }
    }

Исправил задачу.
Заворачиваю код в тег так, как вы и сказали, но все равно отображается неправильно…

static void Main()
    {
        double sum;

        for (int x = 1; x  x; y--)
            {
                for (int k = 1; k <= 30; k++)
                {
                    if (Math.Pow(x, 2) + Math.Pow(y, 2) == Math.Pow(k, 2))
                    {
                        Console.WriteLine($"{x} {y} {k}");
                    }
                }
            }
        }   
    }

Y3.16. Найти размеры всех прямоугольных параллелепипедов, объем которых равен заданному натуральному числу v и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров ребер параллелепипеда:
а) считать разными;
б) считать совпадающими.
Решил алгоритмом лоб в лоб, до другого пока что не додумался.
A) считать разными;

static void Main()
    {
        int v = 8;

        if (v <= 0)
        {
            Console.WriteLine("Параллелепипеда не существует");
        }

        for (int x = 1; x <= v; x++)
        {
            for (int y = 1; y <= v; y++)
            {
                for (int z = 1; z <= v; z++)
                {
                    if (x * y * z == v)
                    {
                        Console.WriteLine($"{x} {y} {z}");
                    }
                }
            }
        }
    }

б) считать совпадающими.

static void Main()
    {
        int v = 8;

        if (v <= 0)
        {
            Console.WriteLine("Параллелепипеда не существует");
        }

        for (int x = 1; x <= v; x++)
        {
            for (int y = 1; y <= v; y++)
            {
                for (int z = 1; z  x && y > z) || (x > y && z > y) || (x > y && x > z)))
                    {
                        Console.WriteLine($"{x} {y} {z} - Совпадает");
                    }
                }
            }
        }
    }

Переделал случай Б.
Заключаю код в …, не срабатывает.

static void Main()
    {
        int v = 24;

        if (v <= 0)
        {
            Console.WriteLine("Параллелепипеда не существует");
        }

        for (int x = 1; x <= v; x++)
        {
            for (int y = 1; y = x; z--)
                {
                    if (x * y * z == v)
                    {
                        Console.WriteLine($"{x} {y} {z}");
                    }

                }
            }
        }
    }

Y3.16. Найти размеры всех прямоугольных параллелепипедов, объем которых равен заданному натуральному числу v и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров ребер параллелепипеда:
а) считать разными;
б) считать совпадающими.

static void main

Y3.15. Найти размеры всех прямоугольников, площадь которых равна заданному натуральному числу s и стороны которых выражены натуральными числами. При этом решения, которые получаются перестановкой размеров сторон:
а) считать разными;

static void Main()
    {
        int n = 40;
        for (int i = 1; i <= n; i++)
        {
            if (n % i == 0)
                Console.WriteLine($"Сторона a - {i}, сторона b - {n/i}");
        }

б) считать совпадающими.

static void Main()
    {
        int n = 40;
        for (int i = 1; i <= n; i++)
        {
            if (n % i == 0 && n/i < i)
                Console.WriteLine($"Сторона a - {i}, сторона b - {n/i} - Совпадает");
            else if (n % i == 0)
                Console.WriteLine($"Сторона a - {i}, сторона b - {n/i}");
        }

Не сработали pre..

Вот так лучше оформление ?

   static void Main()
    {
        int square = 40, height = 0;

        for (int width = 1; width <= square; width++)
        {
            if (square % width == 0 && square / width < width)
            {
                height = square / width;
                Console.WriteLine($"Сторона a - {width}, сторона b - {height} - Совпадает");
            }  
            else if (square % width == 0)
            {
                height = square / width;
                Console.WriteLine($"Сторона a - {width}, сторона b - {height}");
            }
                
        }
    }   

Поправил.
Вариант A — Считать разными.

    static void Main()
    {
        int square = 25;

        if (square <= 0)
        {
            Console.WriteLine("Неверное значение, прямоугольника не существует");
        }

        for (int width = 1; width <= square; width++)
        {
            int height = square / width;

            if (square % width == 0)
            {
                Console.WriteLine($"Сторона a - {width}, сторона b - {height}");
            }               
        }
    }

Вариант Б — Считать совпадающими.

    static void Main()
    {
        int square = 25;

        if (square <= 0)
        {
            Console.WriteLine("Неверное значение, прямоугольника не существует");
        }

        for (int width = 1; width <= square; width++)
        {
            int height = square / width;

            if (square % width == 0 && square / width < width)
            {
                Console.WriteLine($"Сторона a - {width}, сторона b - {height} - Совпадает");
            }
            else if (square % width == 0)
            {
                Console.WriteLine($"Сторона a - {width}, сторона b - {height}");
            }               
        }  
    }

Второй граничный случай, как я правильно понимаю это максимальное значение типа данных int ?

И еще вы написали, что в варианте Б можно убрать второй if, вот не понял насчет его.

Y3.14. Два натуральных числа называются дружественными, если каждое из них равно сумме всех делителей другого (само другое число в качестве делителя не рассматривается). Найти все пары натуральных дружественных чисел, меньших 50 000.
static int SumOfDividers(int n)
{
var sum = 0;
for (int i = 1; i < n / 2 + 1; i++)
{
if (n % i == 0) sum += i;
}
return sum;
}
static void Main(string[] args)
{
for (int i = 20; i <= 40; i++)
{
for (int j = 20; j <= 40; j++)
{
if (i != j && SumOfDividers(i) == SumOfDividers(j))
Console.WriteLine($"{i} — {j}");
}
}
}

Y3.13. Найти натуральное число из интервала от a до b с максимальной суммой делителей.

int storage = 0, max = 0, answer = 0, j, i;
Console.WriteLine(«Введите n»);
int n = int.Parse(Console.ReadLine());
for (i = 1; i <= n; i++)
{
for (j = 1; j max)
{
max = storage;
answer = i;
}
storage = 0;
}
Console.WriteLine(«Ответ: {0} «, answer);
Console.ReadKey();

Y3.12. Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и, естественно, исключая это самое число. Например, совершенным является число 6 ( 6 1 2 3 ). Найти все совершенные числа, меньшие 100 000.
int sum;

for (int i = 1; i < 10000; i++)
{
sum = 0;
for (int j = 1; j < 10000; j++)
{
if (i % j == 0)
{
sum = sum + j;
if (sum == i)
{
Console.WriteLine(i + " ");
}
}
}
}

Y3.9 Найти сумму делителей каждого из целых чисел от 50 до 70.
int sum = 0;
for (int i = 50; i < 70; i++)
{
for (int j = 1; j < i; j++)
{
if (i % j == 0)
sum += j;
}
}
Console.WriteLine("Сумма делителей чисел от 50 до 70: "+sum);
Console.ReadKey();

задание заключается в том, что найти сумму делителей отдельно для каждого числа, а не для всех вместе

Y3.8. Найти 100 первых простых чисел.
static void Main(string[] args)
{
int sum = 0;
int n = int.Parse(Console.ReadLine());
for (int i = 2; i <= n; i++)
{
if (isSimple(i))
{
if (sum < 100)
{
sum++;
Console.Write(i.ToString() + ",");
}
}
}
}

private static bool isSimple(int n)
{
for (int i = 2; i < (int)(n / 2); i++)
{
if (n % i == 0)
return false;
}
return true;
}

Y.3.2
Console.Write(«Ведите количество строк: «);
int a = int.Parse(Console.ReadLine());
string str = «»;
for (int i = 1; i <= a; i++)
{
str = str + "+";
Console.Write(i + "" + str + '\n');
}

Y3.18. Даны натуральные числа m и n. Вычислить 1n + 2n + … + mn.

static void Main(string[] args)
{
   int sum, degr, max, part, k;
   max = int.Parse(Console.ReadLine());
   degr = int.Parse(Console.ReadLine());
   sum = 0;
   for (int i = 1; i <= max; i++)
   {
      part = i;
      k = part;
      for (int j = 1; j < degr; j++)
         part *= k;
      sum += part;
   }
   Console.WriteLine(sum);
}

Y3.21. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. Операции деления, целочисленного деления и определения остатка не использовать.

int i, j, k;
for (i = 1; i < 10; i++)
   for (j = 0; j < 10; j++)
   {
      if (i == j) continue;
      for (k = 0; k < 10; k++)
      {
         if (i == k || k == j) continue;
         Console.WriteLine( i * 100 + j * 10 + k);
         Console.ReadKey();
      }
   }

Y3.10. Найти все целые числа из промежутка от 100 до 300, у которых сумма делителей равна 50.

static void Main(string[] args)
{
   int i, a, x, sum;
   for (i = 100; i <= 300; i++)
   {
      sum = 0;
      for (a = 1; a <= i; a++)
      {
         x = i % a;
         if (x == 0)
         sum += a;
      }
      if (sum == 50)
         Console.WriteLine(i);
   }
}

Y3.7. Найти все трехзначные простые числа (простым называется натуральное число, большее 1, не имеющее других делителей, кроме единицы и самого себя).

static void Main(string[] args)
{
int i, a, x, sum;
for (i = 100; i <= 999; i++)
{
   sum = 0;
   for (a = 1; a <= 999; a++)
   {
      x = i % a;
      if (x == 0)
         sum += 1;
   }
   if (sum == 2)
      Console.WriteLine(i);
}
}

Y3.3. Найти все целые числа из промежутка от 1 до 300, у которых ровно пять делителей.

static void Main(string[] args)
{
   int i, a, x, sum;
   for (i = 1; i <= 300; i++)
   {
      sum = 0;
      for (a = 1; a <= 300; a++)
      {
         x = i % a;
         if (x == 0)
           sum += 1;
      }
      if (sum == 5)
         Console.WriteLine(i);
   }
}

static void Main(string[] args)
{
for (int i = 1; i < 300; i++)
if (DelimCount(i) == 5)
Console.Write(i + " ");
Console.ReadKey();
}

static int DelimCount(int i)
{
int count = 0;

for (int a = 1; a < i; a++)
if (i % a == 0)
count++;
return count;
}

Y3.1. Найти количество делителей каждого из целых чисел от 120 до 140.

static void Main(string[] args)
{
   int i, a, x, sum;
   for (i = 120; i <= 140; i++)
   {
      sum = 0;
      for (a = 1; a <= 140; a++)
      {
         x = i % a;
         if (x == 0)
            sum += 1;
      }
      Console.WriteLine(sum);
   }
}

Y3.2. Составить программу для графического изображения делимости чисел от 1 до n (значение n вводится с клавиатуры). В каждой строке надо напечатать очередное число и столько символов «+», сколько делителей у этого числа. Например, если n = 4, то на экране должно быть напечатано:
1+
2++
3++
4+++

static void Main(string[] args)
{
   int n = int.Parse(Console.ReadLine());
   int i;
   int a;
   int b;
   string c;
   for (i = 1; i <= n; i++)
   {
      c = null;
      for (a = 1; a <= n; a++)
      {
         b = i % a;
         if (b == 0)
            c += "+";
      }
      Console.WriteLine(i + c);
   }
}

Console.Write(«Ведите количество строк: «);
int a = int.Parse(Console.ReadLine());
string str = » «;
for (int i = 1; i <= a; i++)
{
str = str + "+";
Console.Write(i + "" + str + '\n');
}

95
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x