如何快速求一个数的因子个数

nandizhu 2009-03-26 04:28:40
如题
...全文
3832 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
LennonKwan 2009-03-30
  • 打赏
  • 举报
回复

int fCount(int a){
int c = 0, i = 2;
while (a > 0){
while (a % i == 0){
c++;
a /= i;
}
i++;
}
}
绿色夹克衫 2009-03-27
  • 打赏
  • 举报
回复
比如600 = 2^3 * 3^1 * 5^2 那么因子个数是(3+1)*(1+1)*(2+1) = 24个!

http://topic.csdn.net/u/20081209/12/3dd2b81e-fe03-4258-8bbf-0b93c4dd860a.html
fellatioyzx 2009-03-26
  • 打赏
  • 举报
回复
用从1到N每个都除一下,除开的计数器加1。
这样好像也不太费时
baihacker 2009-03-26
  • 打赏
  • 举报
回复
for (i = 2; i<N+1 && n >= i; i = mark[i])
{
int c = 0;
while (n%i==0) ++c,n/=i;
result *= c+1;
}
if (n != 1) result *= 2;

这里在求n的因子个数

9=3*3
那么因子个数是3
9=3^2
2+1为所求

如果
n = p1^a1*p2^a2...pk^ak;
那么因子个数为
(a1+1)*(a2+1)*...*(ak+1)
nandizhu 2009-03-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dlyme 的回复:]
先进行素因子分解,分解之后计算各素因子的幂次乘积就可以了
[/Quote]

可以详细一点吗???

比如 9=3*3

那它的因子数目是几??
baihacker 2009-03-26
  • 打赏
  • 举报
回复

//这是求两个数的公因子的个数的
//等价于求这两个数的最大公约数的因子的个数
//注意一下数据范围
#include <stdio.h>

#define N 1000

int mark[N+1] = {0};

void InitPrimeTable()
{

int i, j, k;

for (i = 2; i-N-1; mark[i] = i + 1, i++);
for (i = 2; i-N-1; mark[k] = N + 1, i = mark[i])
for (k = i, j = mark[i]; j-N-1; j = mark[j])
if (j%i) mark[k] = j, k = j;

}


int gcd(int a, int b)
{return b ? gcd(b, a%b) : a;}
int main(int argc, char* argv[])
{
int n;
InitPrimeTable();
scanf("%d", &n);
while (n--)
{
int a, b, i, curr = 0, result = 1;
int n;
scanf("%d%d", &a, &b);
n = gcd(a, b);
for (i = 2; i<N+1 && n >= i; i = mark[i])
{
int c = 0;
while (n%i==0) ++c,n/=i;
result *= c+1;
}
if (n != 1) result *= 2;
printf("%d\n", result);
}
return 0;
}
  • 打赏
  • 举报
回复
先进行素因子分解,分解之后计算各素因子的幂次乘积就可以了

33,009

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧