首页 > 代码库 > 逆向思维求素数
逆向思维求素数
1 #include <stdio.h> 2 3 int main(void) 4 { 5 const int len = 100; 6 int prime[len]; 7 for (int i=0; i<len; i++) 8 prime[i] = 1; // 1 标记这个序号数为素数,0标记为非素数 9 for (int x=2; x<len; x++)10 {11 for (int j=2; x*j<len; j++)12 prime[x*j]=0;13 }14 for (int k=2; k<len; k++)15 {16 if (prime[k]==1)17 printf("%d ", k);18 }19 printf("\n");20 return 0;21 }
看不懂代码了看这里:
假设从2到n个数,我要求其中的素数,已知2为素数。我可以假设都是素数。利用数组prime,例如序号数为4的元素,它不是素数,那prime[4]=0。
好,现在创建prime,让所有值初始化为1,然后让2逐渐增大倍数(从2倍到m倍,这个m*2<=n),这些2的倍数显然都不是素数,需要把对应角标的元素的值改为0.
然后2增加1,重复这个过程,直至n。剩下的角标对应元素值为1的,那些角标的数值就是一个素数。可以依次打印之。
逆向思维求素数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。