Нарциссическое число - Narcissistic number

В теории чисел , самовлюбленный номер (также известный как Давнопрошедшее цифровой инвариант ( PPDI ), номер Армстронг (после того, как Майкл Ф. Армстронг) или плюс совершенное число ) в данной системе счисления это число , которое является суммой его собственного цифры, каждая из которых возведена в степень числа цифр.

Определение

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

где - количество цифр в числе в базе , а

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

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

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

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

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

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

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

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

В базе 10 всего 89 нарциссических чисел, самое большое из которых

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

с 39 цифрами.

Нарциссические числа и циклы 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 A010344 и A010343
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

A010346
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

A010348
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 A010350
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 A010354 и A010351
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 A010353
10 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54748, 92727, 93084, 548834, ... 89 A005188
11 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, 56, 66, 105, 307, 708, 966, A06, A64, 8009, 11720, 11721, 12470, ... 135 A0161948
12 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, 25, A5, 577, 668, A83, 14765, 938A4, 369862, A2394A, ... 88 A161949
13 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, 14, 36, 67, 77, A6, C4, 490, 491, 509, B85, 3964, 22593, 5Б350, ... 202 A0161950
14 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, 136, 409, 74AB5, 153A632, ... 103 A0161951
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 A0161952
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, CE080, CE C84E1, ... 294 A161953

Расширение до отрицательных целых чисел

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

Пример программирования

Python

В приведенном ниже примере реализуется нарциссическая функция, описанная в определении выше, для поиска нарциссических функций и циклов в 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 ()
    {
        Scanner in = new Scanner (System.in);
        System.out.println("Enter the number: ");
        int num = in.nextInt();
        double sum = required_sum(num);
        if (num == sum)
            System.out.println("Armstrong Number");
        else 
          System.out.println("Not an Armstrong Number");
        }
    
    public static int no_of_digits(int num)
    { 
      int i;
      for ( i = 0; num > 0; i++)
        num /= 10;
      return i;      
    }
    
    public static double required_sum(int num)
    {   
        int i = no_of_digits(num);
        double sum = 0;
        while (num > 0)
        {
            int digit = num % 10;
            num/=10;
            sum += Math.pow(digit,i);
        }
        return sum;
    }

C #

Следующая программа на 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

Следующая программа на языке 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;
}

Смотрите также

использованная литература

внешние ссылки