编程把1997的倒数化为循环小数,并统计出这个循环小数有多少位。

编程把1997的倒数化为循环小数,并统计出这个循环小数有多少位。,第1张

一个大于1的自然数 N,如果不能在分解质因数后化成:N = 2^p 5^q (p,q是自然数)的形式,那 N 的倒数 1/N 就是一个混或纯无限循环小数,但其循环节的长度最多只能到 N - 1。这是因为当除数是 N 时,余数只能是 1 到 N - 1,当同一个余数再次出现时,下一个循环就开始了。我们暂且称这样的自然数是 N'。根据这个思路,我们可以编制一段小程序,求出那些比较大的自然数 N' 的倒数的循环节和循环节长度。下面把 1980 到 2010 的倒数情况罗列一下,由于一些倒数的循环节长度比较大,循环节部分没有列出来,但根据你的题目,特把 1997 的倒数的循环节部分列在最后。

倒数____不循环部分____循环节长度

1980____00____________2

1981__________________282

1982____0_____________495

1983__________________220

1984____000504________15

1985____0_____________99

1986____0_____________110

1987__________________331

1988____00____________210

1989__________________48

1990____0_____________99

1991__________________180

1992____000___________41

1993__________________664

1994____0_____________166

1995____0_____________18

1996____00____________498

1997__________________998

1998____0_____________3

1999__________________999

2000_____________________________有限小数(2000 = 2^4 5^3)

2001__________________308

2002____0_____________6

2003__________________1001

2004____00____________166

2005____0_____________200

2006____0_____________464

2007__________________222

2008____000___________50

2009__________________210

2010____0_____________33

1997 的倒数是纯循环小数,其循环节长度为: 998,其循环节部分是:

00050075112669003505257886830245368052078117175763645468202303455182774161241862794191286930395593390085127691537305958938407611417125688532799198798197295943915873810716074111166750125187781672508763144717075613420130195292939409113670505758637956935403104656985478217325988983475212819228843264897346019028542814221331997996995493239859789684526790185277916875312969454181271907861792689033550325488232348522784176264396594892338507761642463695543314972458688032048072108162243365047571357035553329994992488733099649474211316975463194792188282423635453179769654481722583875813720580871306960440660991487230846269404106159238858287431146720080120180270405608412618928392588883324987481221832749123685528292438657986980470706059088632949424136204306459689534301452178267401101652478718077115673510265398097145718577866800200300450676014021031547320981472208312468703054581872809213820731096644967451176765147721582373560340510766149223835753630445668502754131196795192789183775663495242864296444667

也可以这样考虑:

∵ 自然数n的素数分解中仅当出现素数 2,5 时,才使得n的倒数不再是纯循环小数

∴ 个位不是 5 的奇自然数的倒数,除 1 以外,均是纯循环小数,我们记这样的自然数为 N'

∵ 纯循环小数可以这样编程:N' 除一系列的 9,当余数为零时,9 的个数即为 N' 倒数的循环节长度

又∵ 1997 是素数,属于 N' 一类的数

∴ 可以通过此法编程求得 1997 的倒数的循环节长度为:998

最后我们验证一下:

∵ 素数p化成循环小数后,其循环节长度d满足:d|(p-1),即d整除(p-1)

又∵ 1997 - 1 = 1996 = 2^2 × 499

∴ 1997 的倒数的循环节可能的长度是:1,2,4,499,998,1996

∴ 我们通过编程获得的素数 1997 的倒数的循环节长度为:998,是可以接受的。

由于两种方法的编程都比较简单,具体的程序就不列出来了。

如果仅仅a/b计算循环节长度,流程如下:[]将a/b简化成最简分数;[]将分母中含有2或5的因子剔除;[]计算分母关于10的“指数”,可以先计算出分母的欧拉函数,然后试除其因子,计算出使其关于10的模幂等于1的最小指数即为所求。可参见:Multiplicative Order

#include

<stdioh>

int

main()

{

int

a,b;

scanf("%d%d",&a,&b);

printf("a/b=%f\na%b=%d\n",a10/b,a%b);

return

0;

}

你的问题有两点我不太清楚,先这样写了:

1我不知道你要的是两个数的互相运算,即既要a/b及a除以b的余数,又要b/a及b除以a的余数,还是只要一部分。

2你要的商是要精确值还是只要整数部分,如果要精确值还可能涉及到商的循环节问题,那可是要用到高精度的。

以上就是关于编程把1997的倒数化为循环小数,并统计出这个循环小数有多少位。全部的内容,包括:编程把1997的倒数化为循环小数,并统计出这个循环小数有多少位。、a/b=c问怎么确定这个循环小数c的循环节长度、编写C语言程序:对于任意的输入的两个整数,求出他们的商和余数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9630512.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存