|
|
发表于 2006-5-16 10:11:35
|
显示全部楼层
没有注释 看不懂啊
再是代码
- #include <stdio.h>
- #include <math.h>
- #define MAX 100
- int * CommDivisor(int num, int * s, int len)
- {
- int i, j;
- int div;
- *s = 0;
- for(i = 1, j = 0; i <= len && j <= len; i++)
- {
- if(num % i == 0 && (div = num / i) <= MAX)
- {
- if(i != div && i != 1)
- {
- *(s + (++j)) = i;
- *(s + (++j)) = div;
- }
- }
- }
- *s = j;
- *(s + (++j)) = '\0';
- return s;
- }
- int main(int argc, char *argv[])
- {
- int g, l;
- int sqrt_g, sqrt_l;
- int len_g, len_l;
- int *s_g, *s_l, *s_c;
- int i, j;
- int commdiv = 0;
- int sqrt_c, len_c;
-
- while(1){
- g = l = 0;
- scanf("%d", &g);
- scanf("%d", &l);
- if(g == 0 && l == 0)
- break;
- if(g < MAX && l < MAX)
- {
- printf("%d\n", g);
- }
- else
- {
- sqrt_g = sqrt(g);
- s_g = (int *)malloc(sqrt_g * sizeof(int));
- s_g = CommDivisor(g, s_g, sqrt_g);
-
- sqrt_l = sqrt(l);
- s_l = (int *)malloc(sqrt_l * sizeof(int));
- s_l = CommDivisor(l, s_l, sqrt_l);
-
- len_g = *s_g;
- len_l = *s_l;
-
- if(len_g > 2 || len_l > 2){
- printf("%d\n", g);
- }
- else
- {
- for(i = 1; i <= len_g && commdiv == 0; i++){
- for(j = 1; j <= len_l; j++){
- if(*(s_g + i) == *(s_l + j)){
- commdiv = *(s_g + i);
- break;
- }
- }
- }
- if(commdiv > 0){
- sqrt_c = sqrt(commdiv);
- s_c = (int *)malloc(sqrt_c * sizeof(int));
- s_c = CommDivisor(commdiv, s_c, sqrt_c);
- len_c = *s_c;
- if(len_c >= 2) printf("%d\n", g);
- else printf("%d\n", l);
- free(s_c);
- }
- }
- free(s_g);/*就这一句出现段错误*/
- free(s_l);
- }
- }
- return 0;
- }
复制代码 |
|