1
分解质因数(5分)
题目内容:
每个非素数(合数)都可以写成几个素数(也可称为质数)相乘的形式,这几个素数就都叫做这个合数的质因数。比如,6可以被分解为2x3,而24可以被分解为2x2x2x3。
现在,你的程序要读入一个[2,100000]范围内的整数,然后输出它的质因数分解式;当读到的就是素数时,输出它本身。
输入格式:
一个整数,范围在[2,100000]内。
输出格式:
形如:
- n=axbxcxd
或
- n=n
所有的符号之间都没有空格,x是小写字母x。
输入样例:
- 18
输出样例:
- 18=2x3x3
时间限制:500ms内存限制:32000kb
1 #include <stdio.h> 2 int isprime(int); 3 int nextprime(int); 4 main() 5 { 6 int i, a = 2, b, n = 0; 7 scanf("%d", &i); 8 if (isprime(i)) 9 { 10 printf("%d=%d ", i, i); 11 } 12 else 13 { 14 printf("%d=", i); 15 b = i; 16 while (b > 1) 17 { 18 if (b%a == 0) 19 { 20 if (n > 0) 21 { 22 printf("x"); 23 } 24 b = b / a; 25 printf("%d", a); 26 n++; 27 } 28 else 29 { 30 a++; 31 a = nextprime(a); 32 } 33 } 34 } 35 } 36 37 int isprime(int i) 38 { 39 int a, tag = 1, b = 1; 40 for (a = 2; a <= i / 2; a++) 41 { 42 tag = 1; 43 if (i%a == 0) 44 { 45 tag = 0; 46 break; 47 } 48 } 49 if (tag == 1) 50 { 51 b = 1; 52 } 53 else 54 { 55 b = 0; 56 } 57 return b; 58 } 59 60 int nextprime(int a) 61 { 62 for (;;) 63 { 64 if (isprime(a)) 65 { 66 return a; 67 } 68 else 69 { 70 a++; 71 } 72 } 73 }