九度 题目1087:约数的个数
来源:互联网 发布:星光模拟器打不开软件 编辑:程序博客网 时间:2024/05/20 00:13
九度 题目1087:约数的个数
原题OJ链接:http://ac.jobdu.com/problem.php?pid=1087
题目描述:
输入n个整数,依次输出每个数的约数的个数。
输入:
输入的第一行为N,即数组的个数(N<=1000)
接下来的1行包括N个整数,其中每个数的范围为(1<=Num<=1000000000)
当N=0时输入结束。
输出:
可能有多组输入数据,对于每组输入数据,
输出N行,其中每一行对应上面的一个数的约数的个数。
样例输入:
51 3 4 6 12
样例输出:
12346
解题思路:
约数个数定理:
对于一个大于1正整数n可以分解质因数:
则n的正约数的个数就是:
其中a1、a2、a3…ak是p1、p2、p3,…pk的指数
源代码:
#include<iostream>#include<cstring>#define MAX_N 100000using namespace std;bool mark[MAX_N+1];int prime[MAX_N+1];int primeSize;int init(){ primeSize=0; memset(mark,0,sizeof(mark)); for(int i=2;i<=MAX_N;i++){ if(mark[i]) continue; prime[primeSize++]=i; for(int j=2*i;j<=MAX_N;j=j+i){ mark[j]=true; } } }int main(){ int N; int ans[1001]; int primeNum[MAX_N]; int size; init(); while(cin>>N && N!=0){ for(int i=0;i<N;i++){ cin>>ans[i]; } for(int i=0;i<N;i++){ memset(primeNum,0,sizeof(primeNum)); size=0; for(int j=0;j<primeSize;j++){ if(ans[i]%prime[j]==0){ while(ans[i]%prime[j]==0){ primeNum[size]++; ans[i]=ans[i]/prime[j]; } size++; } } int num=1; for(int j=0;j<size;j++){ num=num*(primeNum[j]+1); } if(ans[i]!=1){//要考虑大于100000 的素数因子哦 num=num*2; } cout<<num<<endl; } } return 0;}
阅读全文
0 0
- 九度题目1087:约数的个数
- 九度题目1087约数的个数
- 九度题目1087:约数的个数
- 九度 题目1087:约数的个数
- 九度OJ—题目1087:约数的个数
- 九度oj 题目1087:约数的个数
- 九度OJ 题目1087:约数的个数
- 九度 oj 题目1087:约数的个数
- 【九度OJ】题目1087:约数的个数 解题报告
- 九度OJ题目1087:约数的个数
- 题目1087:约数的个数 九度OJ
- 九度OJ 1087 约数的个数
- 九度OJ 1087 约数的个数
- 九度OJ 1087:约数的个数
- 九度-1087 约数的个数[数论]
- 九度OJ-1087:约数的个数
- 九度OJ-1087-约数的个数
- 九度OJ 1087:约数的个数
- 18张图用VMware12安装Centos6.9虚拟机
- C++开源库集合
- 中文正则表达式初步使用
- MyBatis Generator 详解
- Oracle学习笔记(1)Oracle 权限(grant、revoke)
- 九度 题目1087:约数的个数
- 关系型数据库和非关系型数据库概述
- 实训复习篇(一)
- 注解
- 线段树-I Hate It (点更新,求点)
- Oracle 之 AIO (异步io)
- WinDBG技巧:this指针的常见误区 (ECX寄存器存放this指针)
- 1050. 螺旋矩阵(25)
- VS2010&MFC对话框编程(1)——对话框控件简介