菜鸟学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);
}
} 所谓素数是指除了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之间有无因子即可) 吾爱破解有你更精彩{:1_921:}{:1_921:}{:1_921:} 吾爱破解有你更精彩 吾爱有你更精彩 学习,提升
页:
[1]