1

Тема: Дано натуральне число n. C#

Привіт всім. Дано натуральне число n. Перевірити, чи можна подати n! у вигляді добутку трьох послідовних цілих чисел. Ось таке завдання, код я написав але він працює неправильно. Допоможіть виправити або запропонуйте свій код. Допоможіть.

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

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int iNum;
            int i;
            Console.WriteLine("Введіть натуральне число");
            iNum = Convert.ToInt32(Console.ReadLine());
            iNum = Math.Abs(iNum);
            if (iNum >= 2)
            {
                for (i = 2; i <= iNum; i++)
                {
                    if(i%2 != 0) {
                        if(i%3 != 0) {
                            if(i%5 == 0)
                                Console.WriteLine("\n"+i);
                        }
                        else Console.WriteLine(i);
                    }
                    else Console.WriteLine(i);
                }
            }
            else Console.WriteLine("Чисел не знайдено");
        }
    }
}

2

Re: Дано натуральне число n. C#

проблема в коді, чи в алгоритмі? бо тут потрібні мінімальні знання  c#, головне - алгоритм.

Подякували: koala1

3

Re: Дано натуральне число n. C#

Ну в коді все добре він компілюється. Але напевне вся проблема в алгоритмі. Чи не могли б Ви запропонувати свій варіант коду. Бо я переробляв код з С#.

4

Re: Дано натуральне число n. C#

Це код.С++
[code=cpp]#include <conio.h>
#include <math.h>
#include <iostream.h>

void main(void)
{
    int iNum; // Змінна для натурального числа
    int i; // Лічильник
    clrscr();

    // Вводимо натуральное число
    cout << " Введіть натуральне число: ";
    cin >> iNum;

    // Якщо введено від'ємне то беремо
    // абсолютне значення числа
    iNum = abs(iNum);

    // Шукаємо числа, які діляться на:
    // 2 або 3 або 5 і виводимо на екран
    if(iNum >= 2)
    {
        for(i = 2; i <= iNum; i++)
        {
            if(i % 2 != 0) {
                if(i % 3 != 0) {
                    if(i % 5 == 0)
                        cout << i << "\n";
                }
                else cout << i << "\n";
            }
            else cout << i << "\n";
        }
    } else cout << "Чисел не найдено!\n";
}[/code]

5 Востаннє редагувалося koala (18.09.2016 21:16:49)

Re: Дано натуральне число n. C#

Воу-воу-воу. Полегше.
У вас є задача. Скажімо так - нетривіальна. Мені, як диломованому інженеру-математику, одразу не спадає на думку її розв'язок, треба подумати.
У вас є код.

неполіткоректне

Якщо цей код писали не ви - ідіть геть звідси, це форум програмістів, а не плагіаторів.

Добре, є ваш код. Він працює, як ви кажете, "неправильно". Ви можете якось підтвердити свої слова? Навести приклад даних, при яких він дійсно працює неправильно? Може, це ви неправильно сприйняли його роботу як "неправильну"?

Ну в коді все добре він компілюється.

Дуже смішно.

Але напевне вся проблема в алгоритмі.

Можете описати алгоритм, за яким він має працювати? Бажано з поясненнями, чому цей алгоритм має розв'язувати вашу задачу. Можна не розписувати, ми розберемося.

Чи не могли б Ви запропонувати свій варіант коду.

Для початку треба з алгоритмом розібратися.

Подякували: FakiNyan, leofun012

6

Re: Дано натуральне число n. C#

Перевірив - від 3 до 6 є, від 7 до 19 нема, далі треба доводити. Підозрюю, що достатньо буде перевірити, що число між 3 і 6, але доказу поки не маю.

Подякували: FakiNyan, leofun012

7

Re: Дано натуральне число n. C#

Перевірив до 24 включно. Нема.

8

Re: Дано натуральне число n. C#

Щось ніяких міркувань, крім статистичних, в голову не лізе, а 6! являє собою виняток з усіх статистичних закономірностей, які я можу придумати, чим особливо дражнить: якщо є один виняток, то цілком можуть бути і інші.

Подякували: leofun011

9

Re: Дано натуральне число n. C#

Бачу два варіанти: або обмежити n, щоб double вміщав всі знаки n!, або ж довга арифметика. Який вам годиться - той і реалізовуйте.

10

Re: Дано натуральне число n. C#

перевірив до 1000, тільки !3 і !4 підходе

це бідон, але мона легко переписати на c#
import math

for i in range(1,1000):
    f = math.factorial(i)
    for j in range(1,i):
        first = j
        second = j+1
        third = j+2
        allThree = False
        if second<=i:
            j=j*second
        if third<=i:
            j=j*third
            allThree=True
        if j==f and allThree:
            print("!{} fact: {}  {}*{}*{}".format(i,f, first, second, third))

http://не-дійсний-домен/rgjJ0/6bc6923080.png

але тут суть в тому, що спершу йде одиничка, котра нічого не вирішує

11

Re: Дано натуральне число n. C#

5!=4*5*6=120
У вас бідон протікає.

Подякували: FakiNyan, leofun012

12

Re: Дано натуральне число n. C#

Ось вам робочий (в певних межах) бідон:

fact = 1
root = 1
for i in range(1,1000):
    fact *= i
    root *= i**(1./3.)
    introot = int(root)
    if fact == introot*(introot+1)*(introot+2):
        print("%d!=%d=%d*%d*%d"%(i,fact,introot,introot+1,introot+2))
    else:
        print("%d fails"%i)
Подякували: leofun011

13

Re: Дано натуральне число n. C#

koala написав:

Перевірив - від 3 до 6 є, від 7 до 19 нема, далі треба доводити. Підозрюю, що достатньо буде перевірити, що число між 3 і 6, але доказу поки не маю.

Півдня задача крутилась в голові в фоновому режимі, тепер наче розв’язалась.

За умовою, n! = (x - 1)*x*(x + 1) = x*(x² - 1), отже x ≤ n. Тоді добуток всіх чисел, що залишились, дорівнює x² - 1. Але x - 1 теж входить до факторіалу, тому добуток всіх чисел, крім цих двох, має дорівнювати x + 1. Тому максимальне n обмежує рівняння n + 1 ≤ (n - 2)!, яке перестає справджуватись при n ≥ 6.

14

Re: Дано натуральне число n. C#

quez написав:

За умовою, n! = (x - 1)*x*(x + 1) = x*(x² - 1), отже x ≤ n.

З чого б це? n! зростає дуже швидко, n!**1/3 також, x швидко обганяє n. Наприклад,
6!=8*9*10, n=6, x=9.

Подякували: leofun01, quez2