追梦少年_66 发表于 2017-11-23 18:55

菜鸟学C第23题:有10个两位整数,把这些数作以下变化,如果它是素数,则把它乘...


/*
/*23.        有10个两位整数,把这些数作以下变化,如果它是素数,则把它乘以2,若它是偶数则除以2,其余的数减1,请将变化后的10个数按从小到大的次序打印出来。
*/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

int isit(int num);
void quicksort(int *a, int start, int back);
void show(int *a, int length);




void main() {
        int a = { 98,23,56,43,51,15,88,14,77,11 };

        for (int i = 0; i < 10; i++) {
                if (a % 2 == 0) {
                        a = a / 2;
                }
                else if (isit(a)) {

                        a = 2 * a;
                }
                else {

                        a = a - 1;
                }
        }
        show(a,10);
        quicksort(a, 0,9);
        show(a, 10);
        getchar();
}


int isit(int num) {
        int flag = 1;
        for (int i = 2; i <= sqrt(num); i++) {
                if (num % i == 0) {
                        flag = 0;
                        break;
                }
        }
        return flag;
}

void show(int *a, int length) {
        for (int i = 0; i < length; i++) {
                printf("%d,", a);
        }
        printf("\n-------\n");
}
void quicksort(int *a, int start, int back) {
        printf("back=%d\n", back);
        int j = start; //这一步很重要啊,不是0
        if (start < back) {

                for (int i = start + 1; i <= back; i++) {

                        if (a<a) {
                                j = j + 1;
                                int temp = a;
                                a = a;
                                a = temp;
                        }
                }
                int temp = a;
                a = a;
                a = temp;
                quicksort(a, start, j - 1);
                quicksort(a, j + 1, back);
        }
}

追梦少年_66 发表于 2017-11-23 18:56

所谓素数是指除了1和它本身以外,不能被任何整数整除的数,例如17就是素数,因为它不能被2~16的任一整数整除。因此判断一个整数m是否是素数,只需把m被2~m-1之间的每一个整数去除,如果都不能被整除,那么m就是一个素数
另外判断方法还可以简化。m不必呗2~m-1之间的每一个整数去除,只需被2~√m之间的每一个整数去除就可以了。如果m不能被2~√m间任一整数整除,m必定是素数。例如判别17是是否为素数,只需使17被2~4之间的每一个整数去除,由于都不能整除,可以判定17是素数。(原因:因为如果m能被2~m-1之间任一整数整除,其二个因子必定有一个小于或等于√m,另一个大于或等于√m。例如16能被2,4,8整除,16=2*8,2小于4,8大于4,16=4*4,4=√16,因此只需判定在2~4之间有无因子即可)

you789 发表于 2017-11-23 19:07

吾爱破解有你更精彩{:1_921:}{:1_921:}{:1_921:}

Try0oo 发表于 2017-11-23 19:25

吾爱破解有你更精彩

冷风中的一把刀 发表于 2017-11-23 19:47

吾爱有你更精彩

只手过河 发表于 2017-11-23 20:28

学习,提升
页: [1]
查看完整版本: 菜鸟学C第23题:有10个两位整数,把这些数作以下变化,如果它是素数,则把它乘...