分解质因数——数学知识
关键:
为什么for循环里判断出来的都是质因数?
因为i从小到大枚举,目标值内的小质数的倍数已经被消去了,所以都是质数。
为什么for循环结束后还要判断m是否大于1?
因为可能m本身是质数,不能被for循环的值给消去,需要自己把自己除去。
1 #include2 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 }