如何分解质因数

15 篇文章 0 订阅

输入一个正整数repeat (0 < repeat < 10),做repeat次下列运算:

输入一个正整数 m(1 < m < 1000),将 m 分解质因数。

输出使用以下语句:

printf("%d*", i);

输入输出示例:括号内为说明

输入

3        (repeat=3)

2        (m=2)

8        (m=8)

90       (m=90)

输出

2 = 2

8 = 2*2*2

90 = 2*3*3*5

 

#include <stdio.h>
int prime(int m)           /* 函数prime()定义 */
{
   int i;
   for(i=2; i<=m-1; i++)   /* i为除数,取值范围是[2, m-1] */
   { if(m % i == 0) break; } /* 若m可以被i整除,则跳出循环,此时i值必定在范围[2, m-1]内 */
   return i==m;
}
main()
{
    int i, k, m;
    int repeat, ri;
    scanf("%d", &repeat);
    for(ri = 1; ri <= repeat; ri++)
    {   scanf("%d", &m);
        printf("%d = ", m);
        i = 2;
        while(i <= m-1)     /* 可能的质因数范围是:[2, m-1] */
        {                   /* 也可写成while(!prime(m)),即只要m不是素数就继续分解 */
          if(!prime(i)||m % i != 0)/* 若i不是素数或i是素数,但是它不能整除n,所以尝试下一个值 */
          {  i++;   continue;   }
          printf("%d*", i);    /* i是质因数。输出这个质因数 */
          m = m / i;        /* 继续对n / i的商分解质因数 */
        }
        printf("%d\n", m);   /* 输出最后一个不能分解的因数 */
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值