[WA]题目1087:约数的个数
2013-08-10 23:18
232 查看
题目描述:
输入n个整数,依次输出每个数的约数的个数
输入:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
输出:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
样例输入:
样例输出:
代码:
在自己机器上测试正常,提交后WA。不知道为什么???????????
本题利用了约数个数定理。约数个数定理(百度百科)。
因此只需对n进行分解素因数,再求出每个素因数所对应的幂指数,最后利用定理得出结果。
AC的代码:
count += 2
1.函数ncd中,for循环的判断条件i<sqrt(x)。 sqrt(x)为浮点数,有小数位,所以1 < sqrt(2)
2.只需判断前一半即sqrt(x)之前的数,每次+2
3.最后对于有些数最后还是要+1
输入n个整数,依次输出每个数的约数的个数
输入:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
输出:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
样例输入:
5 1 3 4 6 12
样例输出:
1 2 3 4 6
代码:
#include <stdio.h> int num[1001]; bool mark[32000]; int prime[32000]; int primeSize; void init() { primeSize = 0; int i; for(i=0;i<32000;i++) mark[i] = false; for(i=2;i<32000;i++) { if(mark[i]) continue; prime[primeSize++] = i; int j; for(j=i*i;j<32000;j+=i) mark[j] = true; } } int cnt[32000]; int ncd(int x) { int i; for(i=0;i<primeSize;i++) cnt[i] = 0; for(i=0;i<primeSize;i++) { while(x%prime[i]==0) { cnt[i]++; x /= prime[i]; } } int ans = 1; for(i=0;i<primeSize;i++) { if(cnt[i]!=0) ans *= (cnt[i] + 1); } return ans; } int main() { int n; init(); while(scanf("%d",&n)!=EOF) { if(n==0) break; int i; for(i=0;i<n;i++) scanf("%d",&num[i]); int j; for(j=0;j<i;j++) { int ans = ncd(num[j]); printf("%d\n",ans); } } return 0; }
在自己机器上测试正常,提交后WA。不知道为什么???????????
本题利用了约数个数定理。约数个数定理(百度百科)。
因此只需对n进行分解素因数,再求出每个素因数所对应的幂指数,最后利用定理得出结果。
AC的代码:
#include <stdio.h> #include <math.h> int num[1001]; int ncd(int x) { double bound = sqrt(x); int i; int count = 0; for(i=1;i<bound;i++) { if(x%i==0) count += 2; } int a = sqrt(x); if(a*a == x) count++; return count; } int main() { int n,i; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) scanf("%d",&num[i]); for(i=0;i<n;i++) { int ans = ncd(num[i]); printf("%d\n",ans); } } return 0; }
count += 2
1.函数ncd中,for循环的判断条件i<sqrt(x)。 sqrt(x)为浮点数,有小数位,所以1 < sqrt(2)
2.只需判断前一半即sqrt(x)之前的数,每次+2
3.最后对于有些数最后还是要+1
相关文章推荐
- 九度题目1087:约数的个数
- 【九度OJ】题目1087:约数的个数 解题报告
- 九度 题目1087:约数的个数
- 题目1087:约数的个数
- 题目1087:约数的个数
- 九度题目1087:约数的个数
- 【九度OJ】题目1087:约数的个数
- 九度 oj 题目1087:约数的个数
- 题目1087:约数的个数
- 九度OJ 题目1087:约数的个数
- 题目1087:约数的个数
- 56-题目1087:约数的个数
- 题目1087:约数的个数
- 题目1087:约数的个数 九度OJ
- 九度 Online Judge 算法 刷题 题目1087:约数的个数
- 九度OJ—题目1087:约数的个数
- 题目1087:约数的个数
- 九度OJ题目1087:约数的个数
- 百度之星程序设计大赛 E题 题目意思很简单 可是却坑了我无数次,WA到死啊!
- OJ_1087 约数的个数