Jump to content

Нарциссическое число

В теории чисел число нарциссическое [1] [2] (также известный как плюсовершенный цифровой инвариант ( PPDI ), [3] число Армстронга [4] (по мотивам Майкла Ф. Армстронга) [5] или плюс совершенное число ) [6] в заданной системе счисления Это число, которое представляет собой сумму своих цифр, каждая из которых возведена в степень количества цифр.

Определение [ править ]

Позволять быть натуральным числом. Определим нарциссическую функцию для базы быть следующим:

где это количество цифр в числе по основанию , и

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

Например, число 153 в базе это нарциссическое число, потому что и .

Натуральное число является общительным нарциссическим числом, если оно является периодической точкой для , где для положительного целого числа (здесь это итерация ), и образует цикл периода . Нарциссическое число – это общительное нарциссическое число с , а дружелюбное нарциссическое число — это общительное нарциссическое число с .

Все натуральные числа являются предпериодическими точками для , независимо от базы. Это потому, что для любого заданного количества цифр , минимально возможное значение является , максимально возможное значение является , а значение нарциссической функции равно . Таким образом, любое нарциссическое число должно удовлетворять неравенству . Умножив все стороны на , мы получаем или, что то же самое, . С , это означает, что будет максимальное значение где , из-за экспоненциального характера и линейность . За пределами этого значения , всегда. Таким образом, существует конечное число нарциссических чисел, и любое натуральное число гарантированно достигает периодической точки или фиксированной точки меньше, чем , что делает ее предпериодической точкой. Параметр равное 10, показывает, что наибольшее нарциссическое число по основанию 10 должно быть меньше . [1]

Количество итераций необходимо для достижение фиксированной точки — это сохранение нарциссической функции и неопределенным, если он никогда не достигает фиксированной точки.

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

Каждая база то, что не кратно девяти, имеет хотя бы одно трехзначное нарциссическое число. Базы, которых нет

2, 72, 90, 108, 153, 270, 423, 450, 531, 558, 630, 648, 738, 1044, 1098, 1125, 1224, 1242, 1287, 1440, 1503, 1566, 1611, 1 620, 1800, 1935, ... (последовательность A248970 в OEIS )

В десятичной системе всего 88 нарциссических чисел, самое большое из которых —

115,132,219,018,763,992,565,095,597,973,971,522,401

с 39 цифрами. [1]

Нарциссические числа и циклы F b для конкретных b [ править ]

Все числа представлены в базе . '#' — это длина каждой известной конечной последовательности.

Нарциссические числа # Циклы OEIS Последовательность(и)
2 0, 1 2
3 0, 1, 2, 12, 22, 122 6
4 0, 1, 2, 3, 130, 131, 203, 223, 313, 332, 1103, 3303 12 А010344 и А010343
5 0, 1, 2, 3, 4, 23, 33, 103, 433, 2124, 2403, 3134, 124030, 124031, 242423, 434434444, ... 18

1234 → 2404 → 4103 → 2323 → 1234

3424 → 4414 → 11034 → 20034 → 20144 → 31311 → 3424

1044302 → 2110314 → 1044302

1043300 → 1131014 → 1043300

А010346
6 0, 1, 2, 3, 4, 5, 243, 514, 14340, 14341, 14432, 23520, 23521, 44405, 435152, 5435254, 12222215, 555435035 ... 31

44 → 52 → 45 → 105 → 330 → 130 → 44

13345 → 33244 → 15514 → 53404 → 41024 → 13345

14523 → 32253 → 25003 → 23424 → 14523

2245352 → 3431045 → 2245352

12444435 → 22045351 → 30145020 → 13531231 → 12444435

115531430 → 230104215 → 115531430

225435342 → 235501040 → 225435342

А010348
7 0, 1, 2, 3, 4, 5, 6, 13, 34, 44, 63, 250, 251, 305, 505, 12205, 12252, 13350, 13351, 15124, 36034, 205145, 1424553, 1433554, 3126542, 4355653, 6515652, 125543055, ... 60 А010350
8 0, 1, 2, 3, 4, 5, 6, 7, 24, 64, 134, 205, 463, 660, 661, 40663, 42710, 42711, 60007, 62047, 636703, 3352072, 3352272, ... 63 А010354 и А010351
9 0, 1, 2, 3, 4, 5, 6, 7, 8, 45, 55, 150, 151, 570, 571, 2446, 12036, 12336, 14462, 2225764, 6275850, 6275851, 12742452, ... 59 А010353
10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, ... 89 А005188
11 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, 56, 66, 105, 307, 708, 966, А06, А64, 8009, 11720, 11721, 12470, ... 135 А0161948
12 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, Б, 25, А5, 577, 668, А83, 14765, 938А4, 369862, А2394А, ... 88 А161949
13 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, Б, С, 14, 36, 67, 77, А6, С4, 490, 491, 509, В85, 3964, 22593, 5Б350,... 202 А0161950
14 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, 136, 409, 74AB5, 153A632, ... 103 А0161951
15 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, 78, 88, C3A, D87, 1774, E819, E829, 7995C, 829BB, A36BC, ... 203 А0161952
16 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, 156, 173, 208, 248, 285, 4A5, 5B0, 5B1, 60B, 64B, 8C0, 8C1, 99A, AA9, AC3, CA8, E69, EA0, EA1, B8D2, 13579, 2B702, 2B722, 5A07C, 5A47C, C00E0, C00E1, C04E0, C04E1, C60E7, C64E7, C80E0 0Е1, С84Е0, С84Е1 , ... 294 А161953

Расширение для отрицательных целых чисел [ править ]

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

Пример программирования [ править ]

Питон [ править ]

В приведенном ниже примере реализуется нарциссическая функция, описанная в определении выше, для поиска нарциссических функций и циклов в Python .

def ppdif(x, b):
    y = x
    digit_count = 0
    while y > 0:
        digit_count = digit_count + 1
        y = y // b
    total = 0
    while x > 0:
        total = total + pow(x % b, digit_count)
        x = x // b
    return total

def ppdif_cycle(x, b):
    seen = []
    while x not in seen:
        seen.append(x)
        x = ppdif(x, b)
    cycle = []
    while x not in cycle:
        cycle.append(x)
        x = ppdif(x, b)
    return cycle

Следующая программа Python определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

def no_of_digits(num):
    i = 0
    while num > 0:
        num //= 10
        i+=1

    return i

def required_sum(num):
    i = no_of_digits(num)
    s = 0
    
    while num > 0:
        digit = num % 10
        num //= 10
        s += pow(digit, i)
        
    return s

num = int(input("Enter number:"))
s = required_sum(num)
     
if s == num:
    print("Armstrong Number")
else:
    print("Not Armstrong Number")

Ява [ править ]

Следующая Java- программа определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

import java.util.Scanner;

public class ArmstrongNumber {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a positive integer: ");
        int number = in.nextInt();

        if (isArmstrongNumber(number)) {
            System.out.println(number + " is an Armstrong number.");
        } else {
            System.out.println(number + " is not an Armstrong number.");
        }
    }

    public static boolean isArmstrongNumber(int number) {
        int sum = 0;
        String numberString = Integer.toString(number);
        int numberOfDigits = numberString.length();

        for (int i = 0; i < numberOfDigits; i++) {
            int digit = Character.getNumericValue(numberString.charAt(i));
            sum += Math.pow(digit, numberOfDigits);
        }

        return sum == number;
    }
}

С# [ править ]

Следующая программа на C# определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

using System;

public class Program
{
    public static void Main()
    {
        Console.WriteLine("Enter the number:");
        int value = int.Parse(Console.ReadLine());

        if (value == RequiredSum(value))
        {
            Console.WriteLine("Armstrong Number");
        }
        else 
        {
            Console.WriteLine("Not an Armstrong Number");
        }
    }

    private static int CountDigits(int num)
    {
        int i = 0; 
        for (;num > 0; ++i) num /= 10;

        return i;    
    }

    private static int RequiredSum(int num)
    {
        int count = CountDigits(num);

        int sum = 0;
        while (num > 0)
        {
            sum += (int)Math.Pow(num % 10, count);
            num /= 10;
        }

        return sum;
    }
}

С [ править ]

Следующая программа на языке C определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int getNumberOfDigits(int n);
bool isArmstrongNumber(int candidate);

int main()
{
    int userNumber = 0;
    printf("Enter a number to verify if it is an Armstrong number: ");
    scanf("%d", &userNumber);
    printf("Is %d an Armstrong number?: %s\n", userNumber,  isArmstrongNumber(userNumber) ? "true" : "false");
    return 0;
}

bool isArmstrongNumber(int candidate)
{
    int numberOfDigits = getNumberOfDigits(candidate);
    int sum = 0;
    for (int i = candidate; i != 0; i /= 10)
    {
	    int num = i % 10;
	    int n = 1;
	    for (int j = 0; j < numberOfDigits; j++)
		{
			n *= num;
		}
	    sum += n;
    }
    return sum == candidate;
}

int getNumberOfDigits(int n)
{
    int sum = 0;
    while (n != 0)
    {
        n /= 10;
        ++sum;
    }
    return sum;
}

С++ [ править ]

Следующая программа на C++ определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

#include <iostream>
#include <cmath>

bool isNarcissistic(long n) {
    std::string s = std::to_string(n); // creating a string copy of n
    unsigned short l = s.length(); // getting the length of n
    unsigned short i = 0; long sum = 0; unsigned short base; // i will be used for iteration, sum is the sum of all of the digits to the power of the length of the number, and the base is the nth digit of n
    while (i<l) { // iterating over every digit of n
        base = s.at(i) - 48; // initializing the base of the number and subtracting 48 because the ascii for 0 is 48 and the ascii for 9 is 57 so if we subtract 48 it will give a integer version of that character.
        sum += pow(base,l); // adding base^length to the sum variable
        i++; // incrementing the iterator
    }
    return (n==sum) ? true : false; // if the n is equal to the sum return true, else, return false
}
int main() {
    unsigned int candidate; // declaring the candidate variable
    std::cout << "Enter a number to verify whether or not it is a narcissistic number: "; // printing the prompt to gather the input for the candidate variable.
    std::cin >> candidate; // taking the user's input
    std::cout << (std::string)((isNarcissistic(candidate)) ? "Yes" : "No") << std::endl; // printing "Yes" if it is an armstrong number and printing "No" if it isn't
    return 0; // returning 0 for a success
}

Руби [ править ]

Следующая программа Ruby определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

def narcissistic?(value) #1^3 + 5^3 + 3^3 = 1 + 125 + 27 = 153
  nvalue = []
  nnum = value.to_s
  nnum.each_char do |num|
    nvalue << num.to_i
    end
  sum = 0
  i = 0
  while sum <= value
    nsum = 0
    nvalue.each_with_index do |num,idx|
      nsum += num ** i
    end
    if nsum == value
      return true
    else
      i += 1
      sum += nsum
    end
  end
return false
end

JavaScript [ править ]

Следующая программа JavaScript определяет, является ли введенное целое число нарциссическим числом/числом Армстронга или нет.

function narcissistic(number) {
  const numString = number.toString();
    const numDigits = numString.length;
    let sum = 0;

    for (let digit of numString) {
      sum += Math.pow(parseInt(digit), numDigits);
    }

    return sum === number;
}

Ржавчина [ править ]

Следующая программа на Rust печатает все числа Нарциссизма/Армстронга от 0 до 100 миллионов в десятичной системе счисления.

fn is_armstrong_number(num: u64) -> bool {
    let digits = num.to_string();
    digits
        .chars()
        .map(|x| (x as u64 - 0x30).pow(digits.len() as u32))
        .sum::<u64>()
        == num
}

fn main() {
    (0..100_000_000).for_each(|n| {
        if is_armstrong_number(n) {
            println!("{n}")
        }
    })
}


См. также [ править ]

Ссылки [ править ]

  1. ^ Jump up to: Перейти обратно: а б с Вайсштейн, Эрик В. «Нарциссическое число» . Математический мир .
  2. ^ Цифровые инварианты Perfect и PluPerfect. Архивировано 10 октября 2007 г. в Wayback Machine. Скоттом Муром
  3. ^ Цифры PPDI (Армстронг) Харви Хайнца
  4. ^ Числа Армстронга Дика Т. Винтера
  5. ^ Веб-журнал Лайонела Деймеля
  6. ^ (последовательность A005188 в OEIS )

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ac702047b5f1d0a445500af03043c40a__1714823580
URL1:https://arc.ask3.ru/arc/aa/ac/0a/ac702047b5f1d0a445500af03043c40a.html
Заголовок, (Title) документа по адресу, URL1:
Narcissistic number - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)