分解质因数——数学知识

关键:

为什么for循环里判断出来的都是质因数?

  因为i从小到大枚举,目标值内的小质数的倍数已经被消去了,所以都是质数。

为什么for循环结束后还要判断m是否大于1?

  因为可能m本身是质数,不能被for循环的值给消去,需要自己把自己除去。

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 void divide(int m)
 5 {
 6     if(m==1)
 7     {
 8         printf("1 1\n");
 9         return;
10     }
11     for(int i=2;i<=m/i;i++)
12     {
13         if(m%i==0)
14         {
15             int cnt=0;
16             while(m%i==0)
17             {
18                 cnt++;
19                 m/=i;
20             }
21             printf("%d %d\n",i,cnt);
22         }
23     }
24     if(m>1)printf("%d %d\n",m,1);
25     puts("");
26     
27 }
28 
29 int main()
30 {
31     int n;scanf("%d",&n);
32     for(int i=1;i<=n;i++)
33     {
34         int m;scanf("%d",&m);
35         divide(m);
36     }
37     
38     
39     return 0;
40 }

 

posted @ 2022-04-07 19:38  wellerency  阅读(63)  评论(0编辑  收藏  举报