700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言求素数思路 C语言 素数三种思路求解

c语言求素数思路 C语言 素数三种思路求解

时间:2022-05-02 08:11:42

相关推荐

c语言求素数思路 C语言 素数三种思路求解

#includevoid main()

{

//一既不是素数也不是偶数、2是素数

//常规思路

//int i, j,n;

//for (j = 3; j <= n; j++)

//{

//for (i = 2; i <= j - 1; i++)

//if (j%i == 0)

//break; //有整除就说明不是素数

i==n,表明是素数

//}

//开根号

//int i, j, n;

//printf("enter the n:\n");

//scanf("%d", &n);

//for (i = 3; i < n; i++)

//{

//for (j = 2; j <= sqrt((double)i); j++)

//if (i%j == 0)

//break;

//}

/*素数筛选法*/

/*

我们知道要求某一区间内的素数,只需要将这一区间内的合数去除,即筛除即可,这种办法利用的就是这种思想。

例如:2,3,4,5,6,7,8,9,10,11,12,13,14,15.......

第一遍筛掉2的倍数:剩下2,3,5,7,9,11,13,15.....

第二遍筛掉3的倍数:剩下2,3,5,7,11,13,....

第三遍筛掉5的倍数:(为什么是5而不是4,因为4已经被2的倍数筛掉了,再筛已经无意义)

第四遍筛掉7的倍数:(为什么是7而不是6,同理因为6已经被之前的2,3筛掉了再筛也没有意义了)

。。。。。。。。。。。

//千万不要就是只要不是2357的倍数就是素数。思路是错误的,比如899=31*29,要是按2357就完全是错误的

//for (i = 2; i < 1000; i++)

//if (a[i] % 2 == 0)

//a[i] = 0;

//for (i = 3; i < 1000; i++)

//if (a[i] % 3 == 0)

//a[i] = 0;

//for (i = 5; i < 1000; i++)

//if (a[i] % 5 == 0)

//a[i] = 0;

//for (i = 7; i < 1000; i++)

//if (a[i] % 7 == 0)

//a[i] = 0;

*/

int count = 0;

int a[1000];

int i, j;

a[0] = 0;

a[1] = 0;

//初始化

for (i = 2; i < 1000; i++)

a[i] = i;

//核心过程 sqrt((double)1000)也是借鉴了开根号的思想。

for (i = 2; i < sqrt((double)1000); i++)

if ((a[i] != 0))

{

for (j = 2 * i; j < 1000; j += i)

a[j] = 0;

}

//输出结果

for (i = 2; i < 1000; i++)

if (a[i]){

printf("%d\t", a[i]);

count++;

}

printf("%d\t", count);

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。