实验三  Smith

实验目的:

通过本次实验,掌握穷举算法的基本思想。

实验环境:

硬件:PC机

软件:windows操作系统,C语言

实验内容:

若一个合数的质因数分解式逐位相加之和等于其本身逐位相加之和,则称这个数为Smith数。给定一个正整数N,求大于N的最小Smith数。

实验学时:2

实验过程:

1.算法设计

设计一个寻找大于N的最小史密斯数,首先这个史密斯数必须大于N,不能为素数。

构造一个int isPrime(int x)函数,来判断这个数是不是素数。

构造一个int everySum(int x)函数,来计算这个数每个位相加的和。

构造一个int isSmith(int n)函数,调用上面两个函数来判断是否符合史密斯数的条件来判断这个数是不是史密斯数。

主函数调用isSmith(int n)函数得到函数值,并且规定输入‘0’的时候程序结束。

2.程序清单

 #include <stdio.h>
#include <math.h>
//判断是否为素数
int isPrime(int x)
{
int i,num = ;
for(i = ; i < x; i++)
{
if( x % i == )
{
num = -;
break;
}
}
if(num == )
return ;
else
return ;
}
//计算每一位相加的和
int everySum(int x)
{
int sum = ;
while(x > ) {
sum += x % ;
x /= ;
}
return sum;
}
//判断是否为smith数
int isSmith(int n)
{
int i,b = n;
int num[],x = ;
int sum = ;
while( !isPrime(n))
{
for(i = ; i < n; i++)
{
if( isPrime(i) && n % i == )
{
num[x] = i;
x++;
break;
}
}
n /= i;
}
num[x] = n;
for( i = ; i <= x; i++)
{
sum += everySum(num[i]);
}
if(sum == everySum(b))
return ;
else
return ;
}
//主函数
int main()
{
int num;
int flag = ;
while((scanf("%d",&num) != EOF) && (num != ))
/*
EOF,为End Of File的缩写,通常在文本的最后存在此
字符表示资料结束。在本句中表示若输入'0'表示字符结束。
*/
{
flag = ;
for(int i = num + ; ; i++)
{
if( isSmith(i) )
{
printf("%d\n",i);
flag ++;
}
if(flag == )
{
break;
}
}
}
return ;
}

3.运行结果

实验总结:

通过这次实验,学会了怎样判断一个数是否为Smith数和它的判断条件,以及它的算法程序设计,用递归的方法写出了程序,以后要多利用递归算法,将大问题划分为小问题,优化程序设计。

产生大于N的Smith数的更多相关文章

  1. [LeetCode169]Majority Element求一个数组中出现次数大于n/2的数

    题目: Given an array of size n, find the majority element. The majority element is the element that ap ...

  2. [算法]在数组中找到出现次数大于N/K的数

    题目: 1.给定一个整型数组,打印其中出现次数大于一半的数.如果没有出现这样的数,打印提示信息. 如:1,2,1输出1.    1,2,3输出no such number. 2.给定一个整型数组,再给 ...

  3. 在数组中寻找出现次数大于N/K的数

    给定一个int[]数组,给定一个整数k,打印所有出现次数大于N/k的数,没有的话,给出提示信息. === 核心思想:一次在数组中删除K个不同的数,不停的删除,直到剩下的数的种类不足K就停止删除,那么如 ...

  4. 《程序员代码面试指南》第八章 数组和矩阵问题 在数组中找到出现次数大于N/K 的数

    题目 在数组中找到出现次数大于N/K 的数 java代码 package com.lizhouwei.chapter8; import java.util.ArrayList; import java ...

  5. Smith数的判断

    题目描述: smith数是指满足下列条件的可分解的整数: 其所有位数上的数字和等于其全部素数因子的数字之和. 例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数 ...

  6. scala基础题--100以内的数求和,求出当和第一次大于20的当前数【for】

    import util.control.Breaks._ object work01 { def main(args: Array[String]): Unit = { //方式一 var sum:I ...

  7. 找到数组中频次大于1/k的数

    Majority Number III 给定一个数组(长度为L),找到所有出现频次大于1/k的数字. 我们主要使用摩尔投票法(Voting Algorithm)结合Map的数据结构解决此问题.其时间复 ...

  8. Excel 中将大于511的十进制数转换成二进制

    If number < -512 or if number > 511, DEC2BIN returns the #NUM! error value. 所以不能直接使用DEC2BIN函数. ...

  9. [2014亚马逊amazon] 在线笔试题 大于非负整数N的第一个回文数 Symmetric Number

    1.题目 如标题,求大于整数N(N>=0)的第一个回文数的字符串表示形式. 这个题目也是当时笔试第一次见到,花了一个小时才做出了.慢慢总结还是挺简单的. 2.分析 分析如下: (1)一位数N(9 ...

随机推荐

  1. RabbitMQ安装后无法访问15672端口

    切换到RabbitMQ的安装目录 sbin 目录下执行: rabbitmq-plugins enable rabbitmq_management 即可打开管理界面. rabbitmq的web管理界面无 ...

  2. SDN实验---Ryu的应用开发(四)北向接口RESTAPI

    一:推文 软件定义网络基础---REST API概述 软件定义网络基础---REST API的设计规范 二:掌握Ryu基本RESTAPI使用方法 (一)Ryu的RESTAPI (二) REST应用样例 ...

  3. Android android:allowBackup waiting for backup

    在Google settings 中,有个backup 选项,在里面选择开启 如果开启vpn,还是在setting里面还是waiting for backup, 就通过手机链接电脑,安装android ...

  4. windows中设置php环境变量

    1.我的电脑->右键(选择我的属性) 2.点击高级设置 3.点击环境变量 4.在系统变量中找到Path 点击 5.找到php.exe的文件目录,添加到path中 6.php -v 显示版本,表示 ...

  5. Java分布式:分布式锁之Redis实现

    Java分布式:分布式锁之Redis实现 分布式锁系列教程重点分享锁实现原理 Redis锁原理 核心命令 Redis分布式锁的原理是基于其SETNX命令,我们来看SETNX的解释. 实现过程 使用SE ...

  6. nginx的rtmp搭建流媒体服务器实现直播流

    最近自己搞了一个用nginx的rtmp来搭建流媒体服务器,从而实现直播的过程,参考了网上很多资料,有些资料对于初学者来说比较难以理解,在此将我搭建的过程记录下来,分享给大家. 1.下载nginx-rt ...

  7. Linux字符设备驱动实例—globalmem驱动

    1.globalmem虚拟设备实例 globalmem为“全局内存”的意思,在globalmem字符设备中会分配一片大小为GLOBALMEM_SIZE(4KB)的内存空间,并在驱动中提供对这片内存的读 ...

  8. 如何自己手动修改win10磁贴背景颜色?

    前言 当我们安装完应用后,可以选择将应用图标固定到"开始"屏幕,于是就会产生一个磁贴,有的应用会自带背景颜色,有的则是默认的主题色.其实这个只不过是应用本身没有没有去适配win10 ...

  9. 031 SSM综合练习07--数据后台管理系统--用户详情查询

    1.用户详情查询流程分析 2.代码实现 (1)user-list.jsp页面部分代码 点击jsp页面中的详情按钮,发送请求到UserController.java <!--数据列表--> ...

  10. Go 关键字Select

    select select 是Go语言中常用的一个关键字,Linux再也早也引入了这个函数,用来实现非阻塞的一种方式,一个select语句用来选择哪个case中的发送或接收操作可以被立即执行.它类似于 ...