题目描述

输入正整数n,统计它的正因子个数,n<= 10^(12),例如n=30时,输出应该为8。

源码#include

#include

int main () {

int64_t a;

int count = 0;

printf("请输入一个正整数:");

scanf("%lld", &a);

if (a <= 0 || a > pow(10, 12)) {

printf("请输入一个正整数,小于10^(12)");

} else {

for (int i = 1; i <= sqrt(a); i++) {

if ((a % i) == 0) {

count += 2;

}

}

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

}

return 0;

}

剖析

这个题逻辑并不复杂,核心在于分析整型字节数。

1.整型长度

咱们先复习几个概念知识。机器字长

机器字长指的是CPU一次性能处理的二进制位(Bit),如x86-32位、x86-64位架构。机器字长代表了硬件处理速度,CPU处理字长越大,则效率越高,对寄存器、总线宽度要求也就越高。同时,机器字长也是寄存器长度,所以指针字节数跟硬件配置相关。因为指针存储的就是地址。64位CPU,指针大小为8字节。CPU对应的指令字长不一定与机器字长相同,比如为了兼容,64位机器字长也可以支持32位指令字长。32位、64位操作系统

操作系统是运行在硬件上层的第一层软件,而操作系统字长则等于指令字长, 小于等于 机器字长。比如你买了64位架构的电脑,装了个32位的操作系统。

所以究竟是机器字长决定整型数字长还是操作系统字长?都不是。编译器决定数据字长

我使用的gcc编译器。整型数据长度实际是由编译器根据自身硬件长度决定的。Each compiler is free to choose appropriate sizes for its own hardware, subject only to the restriction that shorts and ints are at least 16bits, longs are at least 32bits, and short is no longer than int, which is no longer than long.

以GCC为例,在32位、64位操作系统中,short 是 2个字节,int 是4个字节,32位系统中long 4个字节、long long 8个字节,64位系统中long 与 long long 都是 8个字节。

题目中输入数小于等于1012,大约是214,已经超过了int表示的范围,略宽于-2 * 109 ~ 2 * 109 -1.所以采用了64位整型数据类型,等同于使用 long long,范围大约略宽于 -8 * 1018 ~ 8 * 1018 -1。

2.循环次数

如果i是n的因子,那么n/i也是n的因子,所以只需要遍历到n的算术平方根即可。

3.输入校验

题目对输入数据有大小显示,所以做下必要的校验。

参考

64位计算机int类型字长,64位整数问题相关推荐

  1. python3中的int类型占64位_在windows 10 64位计算机中,默认情况下,numpy数组数据类型将以int32形式出现...

    最初的海报Prana问了一个非常好的问题."为什么在64位计算机上,整数默认设置为32位?"在 据我所知,简短的回答是:"因为它的设计是错误的". 显然,64位 ...

  2. python3中的int类型占64位,有没有什么办法来强制Python来使用64位整数的Windows?

    I've noticed that whenever any integer surpasses 2^31-1 my number heavy code suffers a large slowdow ...

  3. 64位 计算机 最大内存,win10 64位最大支持内存是多少_win10系统最高支持多大内存...

    许多用户认为,win10电脑应该内存越大那么运行速度也就会越快,因此常常会给自己的win10 64位系统增加内存条,可是有些用户可能不知道,win10系统所能承受的内存空间也是有限制的,那么win10 ...

  4. 64位计算机很慢,win7 64位旗舰版系统解决网速变慢的技巧介绍

    任何一款 windows操作系统 使用久后网速或多或少都会变慢一些,win7系统也不例外,很多用户发现自己的电脑网速变得越来越慢,怎么回事呢?该如何处理呢?其实引起网速变慢的原因有很多,下面小编给大家 ...

  5. 32位计算机内存最大多少,32位系统到底支持多大的内存呢

    在我们的日常生活中很多朋友都知道自己的电脑是安装了64位还是32位的系统,但是有的朋友电脑内存是8G安装了32位的系统,发现没有全部使用到8G,甚至使用内存还不够4G,到底是怎么回事呢?32位系统到底 ...

  6. 16位计算机cpu电路图,简单16位CPU设计.doc

    简单16位CPU设计 简单16位CPU设计 一.实验内容 完成从指令系统到CPU的设计,编写测试程序,通过运行测试程序对CPU设计进行正确性评定.具体内容包括:典型指令系统(包括运算类.转移类.访存类 ...

  7. c语言的程序是32位还是64位,在C语言中,对于32位计算机和64位计算机,long的大小是多少?...

    本问题已经有最佳答案,请猛点这里访问. 对于32位平台,C中的long的大小为4字节,而对于64位平台,为8字节是否正确? 通常,但不一定. 如果要使用固定大小的类型,请使用int32_t或int64 ...

  8. c语言那个类型是16位,c语言基本数据类型

    1,常用数据类型及所占大小 short.int.long.char.float.double 这六个关键字代表C 语言里的六种基本数据类型. 在32 位的系统上short 内存大小是2 个byte: ...

  9. Tails 3.0 正式发布,不再支持 32 位计算机

    基于 Debian 9 (Stretch) 的匿名发行版 Tails 已正式释出 3.0 版. Tails 3.0 不再支持 32 位计算机,只支持 64 位计算机.官方表示这是一个艰难的决定,但只支 ...

最新文章

  1. 用大顶堆实现最大优先队列
  2. 周志华:深度学习理论探讨比应用滞后太多
  3. 设为首页加入收藏代码
  4. 标签内超出的文字显示省略号
  5. Source Generators实现简版AutoMapper
  6. spring boot java app_利用spring boot创建java app
  7. spark 学习总结
  8. 《JavaScript高级程序设计》阅读笔记(十六):javascript检测浏览器和操作系统-detect.js...
  9. C# HttpClient Multipart 上传文件
  10. 7-22 切分表达式——写个tokenizer吧 (20 分)
  11. Linux 初级命令
  12. 贴片铝电解电容封装的说明
  13. 120个绝对经典的电脑技巧
  14. 安信可分享 | 安信可Wi-Fi模组对接华为云物联网IoT平台的指南。(附带源码)
  15. 如何生成SSH key以及免密设置
  16. 剪映怎么导入mkv_mkv用什么播放器打开_什么播放器可以打开mkv格式-系统城
  17. navicat 表合并查询_navicat怎么合并表格
  18. 【财务架构day1】财务系统的领域建模——五视图法的分析
  19. 深度学习之目标检测(十一)--DETR详解
  20. python实现crc16校验

热门文章

  1. freopen函数的使用
  2. MTK 电池曲线配置【转】
  3. k3595参数_场效应管 2SK3595-01MR,2SK3595,K3595
  4. outlook错误号
  5. rk3399 android 9.0 frameworks中添加导航栏状态栏控制
  6. 射影几何----过定点的直线求斜率之积的简单方法
  7. 校园服务器虚拟化方案,联想服务器虚拟化方案构建数字校园
  8. 让电脑不被锁屏的方法,亲测有效
  9. 如何用计算机管理员权限,计算机管理员权限如何获得【图解】
  10. VS C++ 共享内存 CreateFileMapping