C/C++,笔试面试,多种方法求100以内的所有素数
来源:互联网 发布:无法备案的域名 编辑:程序博客网 时间:2024/05/18 02:56
使用C语言编写程序,求1到100之间的素数(还有另一种求素数:求前100个素数)。
1.每个数试除到√x
2.将素数保存,让后面的数整除保存的素数
3.筛选:依次删除范围中的2的倍数、3的倍数、5的倍数…
#include<stdio.h>#include<stdlib.h>#include<math.h>#include<memory.h>void test1()//试除法(1){ //思路:每个数试除到√x const int Range = 100; int num = 0; int i = 0, j = 2; for (i = 2; i <= Range; i++) { //令每次试除都从2开始 for (j = 2; j <= sqrt(i); j++) { if (0 == i%j) break; } if (j > sqrt(i)) { printf("%2d ", i); num++; if (0 == num % 10) printf("\n"); } } printf("\n");}void test2()//试除法(2){ //思路:将所求出的素数保存起来,然后每次试除保存的这些素数 const int Range = 100; const int num = (int)(Range / log(Range)*1.16); //素数定理(求一定范围内的所有素数个数) int* str = (int*)calloc(num, sizeof(int));//开辟动态数组,保存以求素数 //memset(str, 0, num*sizeof(int));//没必要 系统开辟空间自动赋值0 int i = 2, j = 0; str[0] = 2; for (i = 2; i < 100; i++) { for (j = 0; str[j] != 0 && i%str[j] != 0; j++) { } if (str[j] == 0) str[j] = i; } for (j = 0; str[j] < Range&&j < num; j++) { if (0 == j % 10) printf("\n"); printf("%2d ", str[j]); } printf("\n"); free(str);}void test3()//筛选法(size = 1B => size = 1bit){ //思路:开辟动态数组初始为0,从2开始一直到最大值,令满足2的倍数条件的下标所对应置为-1,输出值为0的下标 const int Range = 100; int i = 0, j = 0; int num = 0; char* str = (char*)calloc(Range, sizeof(char));//开辟动态数组初始为0 str[0] = 1; str[1] = 1; for (i = 2; i <= Range; i++) { for (j = i + 1; j <= Range; j++) { if (0 == j % i && 0 == str[j]) str[j] = 1; } } for (j = 0; j < Range; j++) { if (str[j] == 0) { if (0 == num++ % 10) printf("\n"); printf("%2d ", j); } } printf("\n"); free(str);}
可查询更多思路
http://blog.csdn.net/program_think/article/details/7032600/
0 0
- C/C++,笔试面试,多种方法求100以内的所有素数
- demo4.c(求100以内的素数)
- C语言求1-100以内的素数
- 编写程序实现求1~500以内的所有素数,同时指定每行输出5个素数。(C++)
- 【C语言助教】1000以内的所有素数
- c语言:找出N以内的所有素数
- java编程:求100以内的所有素数
- 求给定值以内的所有素数
- 求10000 以内的所有可逆素数
- 求10000以内的所有素数
- 求正整数n以内的所有素数
- 求N以内的所有素数
- C语言 求1000以内的回文素数
- [C]找出100以内的素数
- 求100以内的素数!
- 求100以内的素数
- 求100以内的素数
- 求100以内的素数
- 笔试,面试,C/C++,数据结构单链表排序(改进冒泡排序)
- 笔试,面试,C/C++,判断单链表是否带环?若带环,求环长度,求环入口点(两种方法)
- <笔试><面试>C/C++单链表相关(4)判断两链表是否相交,求交点(链表不带环/可能带环)
- <笔试><面试>C/C++单链表(最综合)最全工程从建立到相关函数实现
- C++,笔试面试,使用C++编程,实现万年历
- C/C++,笔试面试,多种方法求100以内的所有素数
- 数据库范式例子说明
- 两数的最大公约数、最小公倍数
- 两个数字交换(不使用临时变量)
- 编写程序将2000年以内的平年闰年分开并分别计算个数
- 使用C语言编写程序,求解有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个序列的前20项
- 有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数
- 求几个相同数字组成不同位数数字的和:s=a+aa+aaa+aaaa+aa…a的值
- 一小球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下。