简单的题目,适合新手学习
下面的程序,融合了:1、快速求质数;2、二分查找;3、递归;
快速求质数,参考:http://blog.csdn.net/chaoojie/article/details/7710988
#include "stdio.h"
#include "math.h"
int pri[7000];
int n;
int k;
int check(int v){
int i, t;
t = (int)sqrt(v);
for(i=0; i<n && pri[i]<=t; i++){
if(v%pri[i] == 0)
return pri[i];
}
return -1;
}
void prime(){
int i;
pri[0] = 2;
n = 1;
for(i=3; i<=65535; i++){
if(check(i)<0)
pri[n++] = i;
}
}
int find(int s, int e, int v){
int m = (s+e)/2;
if(s>e) return 0;
if(pri[m] == v)
return 1;
if(v<pri[m])
return find(s, m-1, v);
else
return find(m+1, e, v);
}
void show(int v){
int t;
printf("*");
if(find(0, n-1, v)){
printf("%d", v);
return;
}
t = check(v);
printf("%d", t);
show(v/t);
}
int main(){
int t;
prime();
freopen("in.txt", "r", stdin);
while(scanf("%d", &k)!=EOF){
if(find(0, n-1, k))
printf("%d", k);
else{
t = check(k);
printf("%d", t);
show(k/t);
}
printf("\n");
}
return 0;
}