4 条题解
-
-2
题目计算mn的积,除了m和n以及1和积的本身,这两对除外,还有几对因子组合就行了; 那我们从2到乘积-1遍历,为了减少复杂度,可以想象一下一个长方形,长宽再递减变成正方形前,长和宽都有不同值,但是在变成正方形后,再递减又变成长方形,那么这样和编程之前的长和宽是一样的,所以我们只要便利到 因子因子>乘积时,就可以退出循环啦
for(long long i=2;i<number;i++){ if((i*i)>number) break; if(number%i==0){ if(m!=i&&n!=i){ //注意排除掉 初始的因子,其他的进行计数 num++; } } }
这里要注意数据类型要定义成 long long;因为int类型的取值范围是:-2147483648 ~ 2147483647,,乘积大于int的取值范围,所以注意定义类型
-
-4
这题也考察int数据范围和long long 的数据范围
数据类型直接定义成long long 就可以啦!
int main() { long long m,n,sum……; return 0; }
请看下图,因为题目m和n的范围到了$9999999$,$m*n$最多可能是$10^{14}$左右,导致超出了int的存储范围,int的最大范围是$2*10^9$左右,因此我们需要改为 long long,注意long之间有空格。
基础数据类型的大小
数据类型名 内容(一般情况) 占用内存大小 能储存的范围 int
/signed
32 位整数 4 Bytes 约 long long
64 位整数 8 Bytes 约 char
字符 1 Byte 至少能储存
常见范围为float
单精度浮点数 4 Bytes
有效数字 位double
双精度浮点数 8 Bytes
有效数字 位$
- 1
信息
- ID
- 315
- 时间
- 1000ms
- 内存
- 16MiB
- 难度
- 8
- 标签
- 递交数
- 673
- 已通过
- 100
- 上传者