题目1087:约数的个数

题意RT

就是要注意加了注释的那里- -!

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<iostream>
 5 #include<cmath>
 6 #include<map>
 7 #include<queue>
 8
 9 using namespace std;
10
11 typedef long long ll;
12
13 const int x = 1000000000;
14 bool ispri[32000];
15 int pri[3410];
16 int c;
17
18 void init()
19 {
20     memset(ispri,0,sizeof(ispri));
21     c = 0;
22     int m = (int)(sqrt(x+0.5)+0.5);
23     for(int i=2;i<=m;i++)
24     {
25         if(!ispri[i])
26         {
27             pri[c++] = i;
28             for(int j=i*2;j<=m;j+=i)
29             {
30                 ispri[j] = true;
31             }
32         }
33     }
34 }
35
36 void solve(int num)
37 {
38     int ans = 1;
39     for(int i=0;i<c;i++)
40     {
41         if(pri[i]<=num && num%pri[i]==0)
42         {
43             int cnt = 0;
44             while(num>0 && num%pri[i]==0)
45             {
46                 cnt++;
47                 num/=pri[i];
48             }
49             ans*=(1+cnt);
50         }
51     }
52     //如果是大于打的素数表的最大值int(sqrt(x+0.5)+0.5)且小于x的素数
53     if(num!=1) ans*=2;  //!!!
54     printf("%d\n",ans);
55 }
56
57 int main()
58 {
59     int n,num;
60     init();
61     while(~scanf("%d",&n))
62     {
63         for(int i=0;i<n;i++)
64         {
65             scanf("%d",&num);
66             solve(num);
67         }
68     }
69     return 0;
70 }
时间: 2024-10-10 08:39:30

题目1087:约数的个数的相关文章

九度OJ 1087 约数的个数

题目1087:约数的个数 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6056 解决:1838 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束. 输出: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数. 样例输入: 5 1 3 4 6 12 样例输出: 1 2 3

九度OJ—题目1087:约数的个数

题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束. 输出: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数. 样例输入: 5 1 3 4 6 12 样例输出: 1 2 3 4 6 来源: 2011年清华大学计算机研究生机试真题 答疑: 解题遇到问题?分享解题心得?讨论本题请访问:h

约数的个数

约数的个数 Description mmoaay小侄子今年上初中,老师出了一道求约数个数的题目,比如8的约数有1,2,4,8共4个. 当数比较小的时候可以人工算,当n较大时就难了. mmoaay嫌麻烦,现在让你编个程序来算. Input 一行一个整数.最后以0结束. Output 分别求出这些整数的约数个数,最后的0不用处理. Sample Input 81000 Sample Output 4 9 题解:求正整数378000共有多少个正约数? 解:将378000分解质因数378000=2^4×

hdu1492(一个数的所有humber bunber的约数的个数)

题目意思: 求一个数的所有humber bunber的约数的个数 http://acm.hdu.edu.cn/showproblem.php?pid=1492 题目分析: 求出2,3,5,7的所有个数,用他们能组合出多少的数,就是n的Humber number数 AC代码: /** *类似求素数的个数每一个数都可以表示成一些素数的乘积 *对于给定的n,需要求出n包含多少的2,3,5,7;用这些个数相乘即为n的Humber number */ #include<iostream> #includ

高效率求约数的个数

高效率求约数的个数 求约数的个数方法有很多,你可以使用O(n)的方法来遍历看是否为约数,更可以使用复杂度的算法从1~来判断个数,但是在这里我们给出的是一种稍快于的方法,大概节省2/3左右的时间. 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束. 输出: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面

牛客网-约数的个数

竟然超时,请大神指教... 题目描述 输入n个整数,依次输出每个数的约数的个数 输入描述: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束. 输出描述: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数. 输入例子: 5 1 3 4 6 12 输出例子: 1 2 3 4 6 1 #include <stdio.h> 2 #incl

pat 乙级题目 1087

题目 1087 有多少不同的值 (20 分) 当自然数 n 依次取 1.2.3.--.N 时,算式 ?n/2?+?n/3?+?n/5? 有多少个不同的值?(注:?x? 为取整函数,表示不超过 x 的最大自然数,即 x 的整数部分.) 输入格式: 输入给出一个正整数 N(2≤N≤10?4??). 输出格式: 在一行中输出题面中算式取到的不同值的个数. 输入样例: 2017 输出样例: 1480 ----------------------------------------------我是华丽的分

刷题2:约数的个数

https://www.nowcoder.com/practice/04c8a5ea209d41798d23b59f053fa4d6 题目 题目描述 输入n个整数,依次输出每个数的约数的个数 输入描述: 输入的第一行为N,即数组的个数(N<=1000) 接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000) 当N=0时输入结束. 输出描述: 可能有多组输入数据,对于每组输入数据, 输出N行,其中每一行对应上面的一个数的约数的个数. 示例1 输入 复制 5 1

题目557-奇数的个数-nyoj20140812

#include <stdio.h>int main(){    int a[11];    while(scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9])!=EOF)   {        int i,num;        num=0;    for(i=0;i&l