C#,史密斯数(Smith Number)的计算方法与源代码

news2025/2/26 19:37:00

一、关于史密斯数的传说

1、关于理海大学Lehigh University

理海大学(Lehigh University),位于宾夕法尼亚州(Pennsylvania)伯利恒(Bethlehem),由富有爱国情怀与民族精神的实业家艾萨·帕克(Asa Packer)创校于1865年,是美国一所历史悠久的私立研究型院校。

2、数学家Albert Wilansky的姐夫H.Smith

1982年,Lehigh大学的数学家Albert Wilansky在查看电话簿的时候,突然发现他的姐夫H.Smith的电话号码有一个很特别的性质:

该数字的所有位数之和,等于该数所有质因子的位数之和!

4937775 = 3 * 5 * 5* 65837

4937775的位数和为:

4+9+3+7+7+7+5 = 42

而该数所有质因子的位数之和为:

3+5+5+(6+5+8+3+7) = 42

于是Albert Wilansky将有这种性质的数叫做Smith number

很显然,质数都有这种性质,所以他把质数排除在外。

运行效果:

二、计算方法

输入一个数,求出其质因子的位数之和,然后判断是否和原数的位数之和相等,质数排除在外,因为任何一个数(大于2的数)除了质数都可以写成一系列的从小的大的质数的乘的形式,所以对于每一个数都做这样的计算,从i(i>=2)开始遍历,如果这个数对i取摸等于0,那么将这个数除以i,直到取摸i不等于0,纪录i的个数,然后在计算一个i的位数之和,总的位数和为(个数*一个的位数之和),然后i++,i的上界为sqrt(n+0.0),当然最后还要做一个判断,这个数是否是质数,这可以在循环中加一个标记来判断是否有因子;如果是质数,最后n是否是1,如果不是加上这个数的位数之和,否则跳过。

三、源代码

其中涉及到 质数的 Sundaram筛选法,也叫“森德拉姆素数筛法”。

using System;
using System.Collections;
using System.Collections.Generic;

namespace Legalsoft.Truffer.Algorithm
{
	public static class SmithNumber
	{
		/// <summary>
		/// 最大数
		/// </summary>
		public static int MAX { get; set; } = Int32.MaxValue - 1024;
		/// <summary>
		/// 质数数组
		/// </summary>
		public static List<int> primes { get; set; } = new List<int>();

		/// <summary>
		/// 质数序列计算的 Sundaram 算法
		/// Sundaram筛选法,也叫“森德拉姆素数筛法”
		/// </summary>
		public static void SieveSundaram()
		{
			bool[] marked = new bool[MAX];

			for (int i = 1; i <= (Math.Sqrt(MAX) - 1) / 2; i++)
			{
				for (int j = (i * (i + 1)) << 1; j <= MAX / 2; j = j + 2 * i + 1)
				{
					marked[j] = true;
				}
			}

			primes.Add(2);

			for (int i = 1; i <= MAX / 2; i++)
			{
				if (marked[i] == false)
				{
					primes.Add(2 * i + 1);
				}
			}
		}

		/// <summary>
		/// 判断 n 是不是 史密斯数
		/// </summary>
		/// <param name="n"></param>
		/// <returns></returns>
		public static bool IsSmith(int n)
		{
			int original_no = n;

			int pDigitSum = 0;
			for (int i = 0; (int)primes[i] <= n / 2; i++)
			{
				while (n % (int)primes[i] == 0)
				{
					int p = (int)primes[i];
					n = n / p;
					while (p > 0)
					{
						pDigitSum += (p % 10);
						p = p / 10;
					}
				}
			}

			if (n != 1 && n != original_no)
			{
				while (n > 0)
				{
					pDigitSum = pDigitSum + n % 10;
					n = n / 10;
				}
			}

			int sumDigits = 0;
			while (original_no > 0)
			{
				sumDigits = sumDigits + original_no % 10;
				original_no = original_no / 10;
			}

			return (pDigitSum == sumDigits);
		}
	}
}


---------------------------------------
POWER BY TRUFFER.CN
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1382931.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础之虚拟机

1、前言 本篇基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、什么是虚拟机&#xff1f; Java 虚拟机&#xff0c;是一个可以执行 Java 字节码的虚拟机进程。Java 源文件被编译成能被 Java 虚拟机执行的字节码文件( .class )。 Java 被设计成允许应用程序可以运…

Required request parameter ‘ids‘ for method parameter type List is not present]

在写delete方法的时候&#xff0c;出现了bug 于是将RequestParam换成PathVariable 两者有何区别&#xff1f; pathVariable和RequestParam的区别 在Spring MVC框架中&#xff0c;PathVariable 和 RequestParam 是两种用于从HTTP请求中获取参数的注解&#xff0c;它们的区别…

企业网盘助力数字化教育资源库建设

教育行业数字化是适应社会发展的必然选择&#xff0c;是教育行业的未来重要发展趋势。万事开头难&#xff0c;如何在数字化时代升级转型是教育行业团队正在面临的挑战。Zoho Workdrive企业网盘深耕智慧文件管理服务&#xff0c;为教育行业量身打造集中文件管理库&#xff0c;推…

test-04-test case generate 测试用例生成 tcases A model-based test case generator

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 自动生成测试用例 Tcases&#xf…

Elasticsearch 地理空间搜索 - 远超 OpenSearch

作者&#xff1a;来自 Elastic Nathan_Reese 2021 年&#xff0c;OpenSearch 和 OpenSearch Dashboards 开始作为 Elasticsearch 和 Kibana 的分支。 尽管 OpenSearch 和 OpenSearch Dashboards 具有相似的血统&#xff0c;但它们不提供相同的功能。 在分叉时&#xff0c;只能克…

决策树:理解机器学习中的关键算法

决策树&#xff1a;理解机器学习中的关键算法 决策树是一种流行而强大的机器学习算法&#xff0c;它从数据中学习并模拟决策过程&#xff0c;以便对新的未知数据做出预测。由于其直观性和易理解性&#xff0c;决策树成为了分类和回归任务中的首选算法之一。在本文中&#xff0…

JVM实战(14)——Young GC调优

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 学习必须往深处挖&…

浅析爱泼斯坦事件 —— 弱电控制强电原理

据网络文字与视频资料&#xff0c;爱泼斯坦事件是犹太精英阶层&#xff0c;为了掌控美国国家机器为犹太利益集团服务&#xff0c;而精心设下的一个局。本文先假设这个结论成立&#xff0c;并基于此展开讨论。 我们知道&#xff0c;弱电管理强电是电气工程中的一门专门学问&…

数据结构学习笔记——查找算法中的树形查找(红黑树)

目录 一、红黑树的定义&#xff08;一&#xff09;黑/红结点、叶子节点&#xff08;二&#xff09;黑色完美平衡 二、红黑树的性质&#xff08;一&#xff09;黑高和高度&#xff08;二&#xff09;叶子结点个数 三、红黑树与AVL对比 一、红黑树的定义 红黑树是一棵二叉排序树…

【嵌入式AI】CanMVk230开发板学习笔记(一)

嵌入式AI学习&#xff1a;CanMVk230开发板学习笔记 官方链接: k230快速入门 github固件下载地址&#xff1a; https://github.com/kendryte/k230_canmv/releases K230的相关软硬件资料&#xff0c;请参考 https://developer.canaan-creative.com/k230/dev/index.html https://g…

2 - 配置/管理 Bean-IOC

1. 基于 XML 配置 Bean 在上一篇里已经模拟了通过 id 来配置获取 bean 依然是使用 Monster 类 1.1 通过类型获取 1&#xff09;xml 配置 <bean id"monster01" class"com.hspedu.spring.beans.Monster"><property name"monsterId" …

解决docker run报错:Error response from daemon: No command specified.

将docker镜像export/import之后&#xff0c;对新的镜像执行docker run时报错&#xff1a; docker: Error response from daemon: No command specified. 解决方法&#xff1a; 方案1&#xff1a; 查看容器的command&#xff1a; docker ps --no-trunc 在docker run命令上增加…

ES的文档操作

一&#xff0c;DSL语句 1&#xff0c;新增文档&#xff1a; 2&#xff0c;查询文档和删除文档&#xff1a; ,3修改文档 修改有两种方式&#xff1a; 全量修改&#xff1a;直接覆盖原来的文档 增量修改&#xff1a;修改文档中的部分字段 全量修改 全量修改是覆盖原来的文档…

基于PyQT的图片批处理系统

项目背景&#xff1a; 随着数字摄影技术的普及&#xff0c;人们拍摄和处理大量图片的需求也越来越高。为了提高效率&#xff0c;开发一个基于 PyQt 的图片批处理系统是很有意义的。该系统可以提供一系列图像增强、滤波、水印、翻转、放大缩小、旋转等功能&#xff0c;使用户能够…

thinkphp学习09-数据库的数据新增

单数据新增 使用 insert()方法可以向数据表添加一条数据&#xff0c;更多的字段采用默认 public function index() {$data [username > 犬夜叉,password > 123,gender > 男,email > wjl163.com,price > 999,details > 犬夜叉介绍];echo Db::name(user)-&g…

物理学如何推动生成式 AI 的发展

一、说明 许多尖端的生成式 AI 模型都受到物理学概念的启发。在本指南中&#xff0c;我们将从高层次上了解物理学如何推动人工智能的进步。不同的领域经常交叉授粉重要概念&#xff0c;这有助于推动其进步。数学概念为物理学的进步奠定了基础;物理学中的概念经常启发经济学的框…

LeetCode讲解篇之90. 子集 II

文章目录 题目描述题解思路题解代码 题目描述 题解思路 初始化一个变量start表示当前从哪里开始遍历nums 搜索过程的数字组合加入结果集 从start开始遍历nums 如果当前元素和前一个元素相等&#xff0c;前一个元素没被使用&#xff0c;则触发剪枝去重操作&#xff0c;跳过当…

如何在海洋cms添加广告

1:下载广告代码&#xff0c;注意广告中的图片要放在自己的server上&#xff0c;图片地址要改为自己的实际图片地址&#xff0c;图片存放位置&#xff0c;存在模板的image里面 2在海洋cms后台添加广告管理&#xff0c;只需要广告index.html代码&#xff0c;转换成js代码 广告名…

GAMES101-Assignment6

一、问题总览 需要加速结构来加速光线与场景的交点&#xff0c;本次练习中&#xff0c;重点关注物体划分算法Bounding Volume Hierarchy (BVH)。本练习要求实现Ray-Bounding Volume求交与BVH查找。 需要从上一次编程练习中引用以下函数: Render() in Renderer.cpp: 将你的光线…

抖音矩阵云混剪系统源码多平台多账号一站式管理(免授权版)

抖音矩阵云混剪系统源码 短视频矩阵营销系统V2.2.1(免授权版) 中网智达矩阵营销系统多平台多账号一站式管理,一键发布作品。智能标题,关键词优化,排名查询,混剪生成原创视频,账号分组,意向客户自动采集,智能回复,多账号评论聚合回复,免切换,免登陆发布….助力您在…