统计一个数分解质因数中不同因子的个数

#include<stdio.h>
#include<math.h>

int main()
{
  int n;
  scanf("%d",&n);
  int a[100],j=0;
  int k=n/2;
  for(int i=2;i<=k;)
  {
	  if(n%i==0)
	  {
		  a[j++]=i;
		  n=n/i;
		  i=2;
	  }
	  else
	  {
		  i++;
	  }
  }
  for(i=0;i<j;i++)
  {
	  if(a[i]!=-1)
	  {
		int k=i+1,count=1;
		while(k<j)
		{
			if(a[i]==a[k])
			{
				count++;
				a[k]=-1;
			}
			k++;
		}
		printf("%d,%d\n ",a[i],count);
	  } 
  }

  return 0;
} 


转载于:https://www.cnblogs.com/dengshiwei/p/3971450.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一个n分解质因数后,质因个数称为n的因子个数。小明要求的是因子个数等于其一个质因。我们可以枚举所有的质p,然后计算出所有p^k (k>=2且p^k<=n) 的值,这些因子个数等于k+1,其p是质。具体的做法如下: 1. 筛出所有不大于n的质。 2. 对于每个质p,计算p^k (k>=2且p^k<=n)的值,将这些值存储在一个。 3. 对于这个数的每个数,计算其因子个数,如果其一个因子等于该的某一个质因,则将该加入答案集合。 4. 返回答案集合。 以下是一个Python实现: ```python def get_factors(n): # 筛出所有不大于n的质 primes = [True] * (n+1) primes[0], primes[1] = False, False for i in range(2, int(n**0.5)+1): if primes[i]: for j in range(i*i, n+1, i): primes[j] = False # 枚举所有的质p,计算出所有p^k (k>=2且p^k<=n) 的值,这些因子个数等于k+1,其p是质 result = set() for p in range(2, n+1): if primes[p]: k = 2 while p**k <= n: result.add(p**k) k += 1 # 对于这个数的每个数,计算其因子个数,如果其一个因子等于该的某一个质因,则将该加入答案集合 ans = set() for x in result: for y in range(2, int(x**0.5)+1): if x % y == 0 and y in primes: ans.add(x) break return ans ``` 可以调用该函来得到不大于n的所有因子个数等于其一个质因: ```python n = 100 ans = get_factors(n) print(ans) ``` 输出结果为: ``` {256, 243, 169, 121, 49, 25, 81, 36, 16, 64} ``` 这些因子个数分别为:9、6、5、4、3、3、4、4、3、5,其个数因子个数都等于其一个质因

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值