Нарциссическое число
В теории чисел число нарциссическое [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}")
}
})
}
См. также [ править ]
- Арифметическая динамика
- Число Дюдени
- Факторион
- Счастливое число
- постоянная Капрекара
- Число Капрекара
- Число Мертенса
- Идеальный цифро-цифровой инвариант
- Идеальный цифровой инвариант
- Сумма-номер продукта
Ссылки [ править ]
- ^ Jump up to: Перейти обратно: а б с Вайсштейн, Эрик В. «Нарциссическое число» . Математический мир .
- ^ Цифровые инварианты Perfect и PluPerfect. Архивировано 10 октября 2007 г. в Wayback Machine. Скоттом Муром
- ^ Цифры PPDI (Армстронг) Харви Хайнца
- ^ Числа Армстронга Дика Т. Винтера
- ^ Веб-журнал Лайонела Деймеля
- ^ (последовательность A005188 в OEIS )
- Джозеф С. Мадачи , Математика в отпуске , Thomas Nelson & Sons Ltd., 1966, страницы 163–175.
- Роуз, Колин (2005), Радикальные нарциссические числа , Журнал развлекательной математики, 33 (4), 2004–2005, страницы 250–254.
- Совершенные цифровые инварианты Уолтера Шнайдера
Внешние ссылки [ править ]
- Цифровые инварианты
- Числа Армстронга
- Числа Армстронга по основанию от 2 до 16
- Калькулятор чисел Армстронга от 1 до 999
- Саймондс, Риа. «153 и нарциссические числа» . Числофил . Брэйди Харан . Архивировано из оригинала 19 декабря 2021 г.