筛选法求素数

摘要: 我们都知道求一个数是不是素数的方法是十分简单的,但是当你判断一个数字集合里面都有哪些素数的时候,纯暴力法就会显得效率十分低下,这时候就需要用技巧筛掉明显不是素数的数字,剩下的再采用暴力直接求解,那么那些明显不是素数呢?首先偶数全不是素数,其次一个素数的倍数也不是素数,那么筛掉这两种情况剩余的一定是素数(反证法可证明),程序如下: 1 int min,max; 2 int t; 3 int i,j,k; 4 int flag[10000] = {0}; 5 int num[10000]; 6 num[2] = 1; 7 num[1] = 0; 8 ... 阅读全文
posted @ 2013-10-21 23:02 光明小天使 阅读(215) 评论(0) 推荐(0) 编辑

检索字符串

摘要: 这道题不难,但是其中有些细节掌握需要用心,注释比较完备。 1 char str1[80]; 2 char str2[80]; 3 int i = 0,j = 0,k; 4 int count =0,c = 0; 5 printf("请输入源字符串:"); 6 gets(str1); 7 printf("请输入需要查找的字符串"); 8 gets(str2); 9 //从源字符串的第一个字符开始查找10 for(i=0;str1[i];i++)11 {12 //如果剩余字符串的长度小于查找字符串... 阅读全文
posted @ 2013-10-16 17:52 光明小天使 阅读(192) 评论(0) 推荐(0) 编辑

判断素数

摘要: 同样是一个简单的题目,但是需要注意一个小知识点,判断一个数n是不是质数,通常判断2~n/2或者2~n^0.5是不是有因子,通常用n/2,这是为什么呢?因为从5开始n/2的平方要大于n本身,所以一个数的两个因子不可能同时比n/2大,因此,只需要判断2~n/2有没有因子既可以判断素数。 1 //定义一个检验数 2 int num; 3 printf("please input a num:"); 4 scanf("%d",&num); 5 for(int i = 2;i*i < num;i++) 6 { 7 if(num % i ... 阅读全文
posted @ 2013-10-15 17:45 光明小天使 阅读(179) 评论(0) 推荐(0) 编辑

10以内的进制转换

摘要: 同样是简单的数理逻辑题,当然如果加上26个字母,可以算36进制以内的转换数,当然这道题用了简单的递归,在这道题的环境下递归和循环都是可以的,但是递归会耗费大量内存,这需要有区别 1 int _tmain(int argc, _TCHAR* argv[]) 2 { 3 //声明函数 4 void Result(int s,int q); 5 //定义进制数和目标数 6 int num,k; 7 printf("please input a num:"); 8 scanf("%d,%d",&num,&k); 9 Result(n... 阅读全文
posted @ 2013-10-15 17:06 光明小天使 阅读(249) 评论(1) 推荐(0) 编辑

基础数理逻辑之空心菱形

摘要: 空心菱形是算法入门的基础题目,做出这道题并没有什么难度,但是下面的代码是根据网上的一些讨巧的方法写出来的,思想值得借鉴。int _tmain(int argc, _TCHAR* argv[]){ int num; int fk = 0, mk = 0; scanf("%d",&num); //取得空格数和行数的关系,上半部分正着数是i,下半部分倒着数是n-i for (int i = 1; i 1 && i < num) { printf("*"); } ... 阅读全文
posted @ 2013-10-15 15:32 光明小天使 阅读(268) 评论(0) 推荐(0) 编辑