构建素数表判断素数
这个对于一般的学生来说就有点复杂了,这里面用到的知识点有很多可以学习的地方,我自己也是在翁凯老师那里学的,这可不是我自己想的,别乱说啊😄
如果看不懂可以私信我
#include<stdio.h>
int isprime ( int x ,int k[] ,int f);
int main (void)
{
const int number = 10 ;//这里的number是常量,所以可以用来定义数组,这个十是十个素数的意思
int prime[number] = {2};//构造素数表,初始化为2,因为2是已知的第一个素数
int count = 1 ;//count是素数表里面的素数的个数,也可以说是位置,如count=1代表的是2,count=2代表的是3
int i = 3 ;//因为初始值是2 ,所以直接从3开始来测试是不是素数,是素数的进入素数表
{//这个只是为了输出好看,输出表头
int i ;
printf ("\t\t\t\t\t");
for ( i = 0 ; i < number ; i ++ ){
printf ("%d\t",i);
}
printf ("\n");
}
while (count < number ){
if ( isprime ( i , prime , count ))//测试i是不是素数,
{
prime[count++] = i ;//如果i是素数的的话,就把i加到prime数组的下一个位置上去
}
{//调试,在这个大括号里面的定义的变量,是不会影响到外面的程序的
printf ("i = %d \tcnt = %d \t",i , count );//这个里面的i是外面的那个i,C99用法
int i ;//这个i和程序前面的那个i没有任何关系
for ( i = 0 ; i < number ; i ++ ){//遍历prime数组,把数组里面的数都输出
printf ("%d\t",prime[i]);
}
printf ("\n");
}//调试
i ++ ;
}
for ( i = 0 ; i < number ; i ++ ){
printf ("%d",prime[i]);
if ( ( i + 1 ) % 5 )
printf ("\t");
else
printf ("\n");
}
return 0;
}
int isprime(int x ,int k[] ,int f)
{
int ret = 1 ;
int i ;
for ( i = 0 ; i < f ; i ++ ){
if ( x % k [i] == 0 ){
ret = 0 ;
break ;
}
}
return ret ;
}