数组操作(找出100以内的素数)
Array_operation(Prime_number_1&2)
方法一:
#include <stdio.h>
//find out all the prime numbers smaller than NUMBERS
//solution1: Traverse all the numbers, eliminating composite numbers one by one.
int check_is_prime(int test_number, int prime_list[], int count_of_current_numbers){
int ret=1;
int i;
for(i=0;i<count_of_current_numbers;i++){
if(test_number%prime_list[i]==0){
ret=0;
}
}
return ret;
}
int main(void){
const int NUMBERS = 100;
int prime_list[NUMBERS]={2};
int cnt=1; //cnt records the current number of prime numbers
int i;
i=3;
while(i<NUMBERS){
if(i%2!=0){
if(check_is_prime(i,prime_list,cnt)){
prime_list[cnt++]=i;
printf("successfully added %d\n",i);
printf("now cnt=%d\n",cnt);
}
}
i++;
}
//output all the prime numbers smaller than the given number
i=0;
while (i<cnt){
printf("%d\n",prime_list[i]);
i++;
}
return 0;
}
方法二:
#include <stdio.h>
//find out all the prime numbers smaller than NUMBERS
//solution2:Another method of elimination. Rule out all the multiples of the current prime numbers.
int main(void){
const int NUMBERS = 100;
int number_condition_list[NUMBERS]={1,1,0}; //1 means it has not been ruled out, 0 means it may be a prime number
for(int i=2;i<NUMBERS;i++){
if(number_condition_list[i]==0){
for(int j=2;j*i<NUMBERS;j++){
number_condition_list[j*i]=1; //Rule out all the multiples of i
}
}
}
//output all the prime numbers
for(int i=0;i<NUMBERS;i++){
if(number_condition_list[i]==0){
printf("%d\n",i);
}
}
return 0;
}
本文对比了两种寻找100以内素数的方法:一种是通过遍历排除法,另一种则是利用条件列表排除倍数。两种方法各有优劣,展示了不同的数组操作技巧和优化策略。
308

被折叠的 条评论
为什么被折叠?



