2. 约数的个数

作者: IceFrozen | 来源:发表于2018-12-30 10:21 被阅读0次
题目描述

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

输入描述:

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

输出描述:

可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。

示例1

输入

5
1 3 4 6 12

输出

1
2
3
4
6

解法
#include<stdio.h>

int main(){
    int j,num,temp,count;    //num为输入的数的个数,count为约数个数
    while(scanf("%d", &num)!=EOF){    //牛客网C语言只能这样控制多组输入
    for(int i = 0; i < num; i++){
        scanf("%d", &temp);
        count = 1;
        for(j = 2; j * j < temp; j++){
            if(temp % j == 0)
                count += 2;
        }
        if(j * j == temp)
            count++;
        if(temp > 1)
            count++;
        printf("%d\n", count);
    }
        
}
    return 0;
}

注意约数判断条件:
(1)1一定是约数,所以至少有1个;
(2)大于1的话自己本身也是;
(3)求a的约数,只用试到根号n,接下来证明这个原理:
假设a<√n,n%a=0,则a是n的一个约数,且n/a也是n的一个约数,所以每个小于√n的约数对应着两个n的约数,当a=√n时,a是唯一一个约数。

相关文章

  • 2. 约数的个数

    题目描述 输入n个整数,依次输出每个数的约数的个数 输入描述: 输入的第一行为N,即数组的个数(N<=1000)接...

  • 约数的个数

    题目链接题目描述输入n个整数,依次输出每个数的约数的个数 输入描述输入的第一行为N,即数组的个数(N<=1000)...

  • 约数的个数

    题目描述 输入n个整数,依次输出每个数的约数的个数输入描述:输入的第一行为N,即数组的个数(N<=1000)接下来...

  • 约数的个数

    题目 题目描述:输入n个整数,依次输出每个数的约数的个数 输入描述:输入的第一行为N,即数组的个数(N<=1000...

  • 最大公因数,最小公倍数

    1、最大公约数:几个数都能被同一个数一次性整除,这个数就叫做这几个数的最大公约数。(或几个数公有的约数,叫做这几个...

  • 约数-倍数法

    求1~n每个数的正约数集合-倍数法 以d为正约数的数有从1到n扫描每个数,将每个数的倍数的正约数集合都加入d。时间...

  • 最大公约数与最小公倍数(Java)

    最大公约数[1] ①定义 几个自然数公有的约数,叫做这几个数的公约数;其中最大的一个,叫做这几个数的最大公约数。 ...

  • 约数问题

    题目描述 输入n个整数,依次输出每个数的约数的个数 //对于输入整数的每个约数,总对应另一个约数使得:ab=num...

  • 趣味数学:5400 共有多少个约数?

    5400 共有多少个约数?求出所有约数乘积的质因数分解形式. 【解】 所以,它的约数个数为: (个) 这些约数可...

  • 最小公倍数

    1.解题思路 可以先用辗转相除法求两个数的最大公约数,而最小公倍数 = 两数之积 / 最大公约数。 2.输入描述 ...

网友评论

    本文标题:2. 约数的个数

    本文链接:https://www.haomeiwen.com/subject/lwzmlqtx.html