C语言的开发在日常开发中被广泛使用,而我们都知道C语言是简单的编译方法,爱站技术频道小编今天就为大家带来了C语言开发中分解质因数的操作实例,一起去进入下文看看吧!

首先来看一个最简单的C语言实现质因数分解的列子:

#include void main( )

{

int data, i = 2;

scanf("%d", &data);

while(data > 1)

{

if(data % i == 0)

{

printf("%d ", i);

data /= i;

}

else i++;

}

}

原理&&方法

把一个合数分解为若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数,分解质因数只针对合数

求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式的叫短除法,和除法的性质差不多,还可以用来求多个个数的公因式:

以24为例:

2 -- 24

2 -- 12

2 -- 6

3 (3是质数,结束)

得出 24 = 2 × 2 × 2 × 3 = 2^3 * 3

代码

可先用素数筛选法,筛选出符合条件的质因数,然后for循环遍历即可,通过一道题目来show一下这部分代码

题目1

题目描述:

求正整数N(N>1)的质因数的个数。

相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入:

可能有多组测试数据,每组测试数据的输入是一个正整数N,(1     输出:

对于每组数据,输出N的质因数的个数。

样例输入:

120

样例输出:

5

提示:

注意:1不是N的质因数;若N为质数,N是N的质因数。

ac代码

#include int main()

{

int n, count, i;

while (scanf("%d", &n) != EOF) {

count = 0;

for (i = 2; i * i 1) {

count ++;

}

printf("%d\n", count);

}

return 0;

}

深入理解

我所谓的深入理解,就是通过4星的题目来灵活运用分解质因数的方法,题目如下

题目2

题目描述:

给定n,a求最大的k,使n!可以被a^k整除但不能被a^(k+1)整除。

输入:

两个整数n(2     输出:

一个整数.

样例输入:

6 10

样例输出:

1

思路

a^k和n!都可能非常大,甚至超过long long int的表示范围,所以也就不能直接用取余操作判断它们之间是否存在整除关系,因此我们需要换一种思路,从分解质因数入手,假设两个数a和b:

a = p1^e1 * p2^e2 * ... * pn^en, b = p1^d1 * p2^d2 * ... * pn^dn

, 则b除以a可以表示为:

b / a = (p1^d1 * p2^d2 * ... * pn^dn) / (p1^e1 * p2^e2 * ... * pn^en)

若b能被a整除,则 b / a必为整数,且两个素数必护质,则我们可以得出如下规律:

若a存在质因数px,则b必也存在该质因数,且该素因数在b中对应的幂指数必不小于在a中的幂指数

另b = n!, a^k = p1^ke1 * p2^ke2 * ... * pn^ken,因此我们需要确定最大的非负整数k即可。要求得该k,我们只需要依次测试a中每一个素因数,确定b中该素因数是a中该素因数的幂指数的多少倍即可,所有倍数中最小的那个即为我们要求得的k

分析到这里,剩下的工作似乎只是对a和n!分解质因数,但是将n!计算出来再分解质因数,这样n!数值太大。考虑n!中含有素因数p的个数,即确定素因数p对应的幂指数。我们知道n!包含了从1到n区间所有整数的乘积, 这些乘积中每一个p的倍数(包括其本身)都对n!贡献至少一个p因子,且我们知道在1到n中p的倍数共有n/p个。同理,计算p^2,p^3,...即可

代码

#include #include #include #define N 1001

int prime[N], size;

/**

* 素数筛选法进行预处理

*/

void initProcess()

{

int i, j;

for (prime[0] = prime[1] = 0, i = 2; i

约数个数定理

对于一个大于1的正整数n可以分解质因数:

n = p1^a1 * p2^a2 * p3^a3 * ... * pn^an

, 则n的正约数的个数为:

(a1 + 1) * (a2 + 1) * ... *(an + 1)

.其中p1,p2,..pn都是n的质因数,a1, a2...an是p1,p2,..pn的指数

证明

n可以分解质因数:n=p1^a1 * p2^a2 * p3^a3 * … * pk^ak,

由约数定义可知p1^a1的约数有:p1^0, p1^1, p1^2......p1^a1 ,共(a1+1)个;同理p2^a2的约数有(a2+1)个......pk^ak的约数有(ak+1)个

故根据乘法原理:n的约数的个数就是

(a1+1)*(a2+1)*(a3+1)*…* (ak+1)

题目3

题目描述:

输入n个整数,依次输出每个数的约数的个数

输入:

输入的第一行为N,即数组的个数(N     接下来的1行包括N个整数,其中每个数的范围为(1     当N=0时输入结束。

输出:

可能有多组输入数据,对于每组输入数据,

输出N行,其中每一行对应上面的一个数的约数的个数。

样例输入:

5

1 3 4 6 12

样例输出:

1

2

3

4

6

代码

#include #include #define N 40000

typedef long long int lint;

int prime[N], size;

void init()

{

int i, j;

for (prime[0] = prime[1] = 0, i = 2; i

以上就是爱站技术频道小编介绍的C语言开发中分解质因数的操作实例,相信大家在看完后对开发有很大的帮助,如果你也觉得js.aizhan.com,要记得继续支持我们哦。

c语言分解质因数的设计思路,C语言开发中分解质因数的操作实例相关推荐

  1. 状态机思路在嵌入式开发中的应用说明及注意事项(普罗米修斯中不少功能节点用了状态机的方法来写)

    我感觉普罗米修斯很多功能模块里面都用到了状态机的思路 比如圆环穿越的,比如最新的二维码降落的代码. 摘自:https://mp.weixin.qq.com/s/qRmBDH-VIHM26AaNFoD9 ...

  2. c语言拍飞虫课程设计报告,C++语言课程计一拍飞虫.doc

    C语言课程计一拍飞虫 C++语言课程设计一拍飞虫 一.实验内容 玩家通过控制拍子拍打飞虫获取分数. 要求如下: 游戏的初始界面如图一,单击空格键即可进入游戏.进入游戏后的界面如图二.左上角有两个记录游 ...

  3. c语言链表p-%3enext,课程设计报告.c语言程序设计.pdf

    课程设计报告.c语言程序设计 学生成绩管理 C语言课程设计报告 学 院 _信息学院_ 专 业 软件工程 班 级 _ _ 学 号 姓 名 课 题 _C语言课程设计_ 指导教师 __ 杨老师 _ 报告成绩 ...

  4. c语言编写万年历课程设计,用C语言编写万年历 C课程设计.pdf

    用C语言编写万年历 C课程设计 用用 C++语言编写万年历语言编写万年历 用用 语言编写万年历语言编写万年历 学生姓名:学生姓名: 指导老师:指导老师: 学生姓名学生姓名:: 指导老师指导老师:: 摘 ...

  5. c语言零件匹配,机械零件设计的C语言编程.pdf

    维普资讯 第 3期 宁波职业技术学 院学报 2oo1 机械零件设计的C语言编程 王灵玲 (宁波职业技术学院 浙江宁波 315800) 摘 要:介绍机械零件设计的编程特点及其 C语言处理 关键词 :Oh ...

  6. c语言实践周通讯录设计报告,C语言程序的设计报告_个人通讯录.docx

    . .下载可编辑. . .下载可编辑. 航空航天大学金城学院 <C语言程序设计>课程设计报告 个人通讯录系统 学号: 学号: 日期: TOC \o "1-5" \h \ ...

  7. 领域驱动设计在互联网业务开发中的实践

    前言 至少30年以前,一些软件设计人员就已经意识到领域建模和设计的重要性,并形成一种思潮,Eric Evans将其定义为领域驱动设计(Domain-Driven Design,简称DDD).在互联网开 ...

  8. c语言编程大体思路,C语言:程序的设计思路跟特点

    C语言的一些特点:1. 采用结构化的控制语句,是完全模块化和结构化的语言. 2. 数据类型丰富,具有现代语言的各种数据结构 3. 语法限制不太严格,程序设计自由度大,同时也意味着容错性差. 4. 允许 ...

  9. c语言饭卡服务程序设计思路,C语言设计—饭卡管理程序.doc

    C语言设计-饭卡管理程序 C语言课程设计报告饭卡管理程序 完成日期:2009年12月 [题目描述]该程序为饭卡管理程序,具有下列功能:(1) 录入某位持卡人的基本信息?教师:职工号?姓名?院系?金额; ...

最新文章

  1. 数据库设计的10个最佳实践
  2. CRNN竞赛程序实现过程
  3. Hadoop编程调用HDFS
  4. 微软与联合国环境规划署联手解决环境问题
  5. PHP的钩子实现解析
  6. 从爬取的文章 HTML 中提取出中文关键字
  7. Java-Runoob-高级教程-实例-方法:11. Java 实例 – enum 和 switch 语句使用
  8. Android Okhttp 配置HTTPS
  9. 什么将计算机连接到网络,Windows 8.1官方教程:将电脑连接到网络-windows技巧-电脑技巧收藏家...
  10. LVS-三种负载均衡方式比较
  11. 吴伯凡-认知方法论-结果的简单,起点的复杂
  12. JavaScript轻应用网络模块介绍
  13. 《动手学深度学习》(PyTorch版)代码注释 - 51 【Style_transfer】
  14. python如何读取uni文件_如何在Python中通过HTTP与UniProt交谈?
  15. 论文阅读笔记---《TransferNet: An Effective and Transparent Framework for Multi-hop Question Answering over》
  16. 如何用PS把图片中的人物剪掉
  17. invoke 按钮点击_使用aspectj对app中按钮的快速点击进行处理
  18. dd_engi 的背包九讲
  19. CSS3,JS制作网页动画(时空穿梭,魔方,坠落星星,全屏樱花特效)
  20. 使用JDK自带的工具keytool生成证书

热门文章

  1. 超级伙伴共创超AI未来,第二代互联网电视山雨欲来
  2. 线程大法修炼(多线程详解)
  3. 浏览器工作原理/浏览器是如何渲染页面?
  4. iFunk翼S,开学季不二之选
  5. R语言时间序列数据算术运算:使用diff函数计算时间序列数据的逐次差分、使用时间序列之间的除法计算相对变化率(乘以100获得百分比)
  6. 使用docker搭建kafka-lenses
  7. 毒霸浏览器 卸载猎豹安全浏览器
  8. 单反拍摄技巧:简单构图
  9. tracert提高回显速度方法
  10. 计算机辅助教育中的评价标准有,计算机辅助教育习题集