有关素数的判断

来源:百度知道 编辑:UC知道 时间:2024/06/03 17:11:11
bool prime( int num)
{
if (num==2||num==3||num==5)
return 1;
unsigned long c=7;
if (num%2==0||num%3==0||num%5==0||num==1)
return 0;
int maxc=int(sqrt(num));
while (c<=maxc)
{
if (num%c==0)
return 0;
c+=4;
if (num%c==0)
return 0;
c+=2;
if (num%c==0)
return 0;
c+=4;
if (num%c==0)
return 0;
c+=2;
if (num%c==0)
return 0;
c+=4;
if (num%c==0)
return 0;
c+=6;
if (num%c==0)
return 0;
c+=2;
if (num%c==0)
return 0;
c+=6;
}
return 1;
}
取7到n的所有整数为全集U
其中的c+=4,c+=6……这些表示每两个素数直接的差值记做D(T),当然,从上面的代码我们能看出是有周期的,T就是周期,我的问题是:从7开始,以D(T)为公差的数列的集合记做A,7到n的所有素数记做B;
那么A一定包含B么?
感谢一楼的回答,但是,这个函数确实能判断素数,如果你觉得我表述的有问题,能不能请你说说你对这个函数的理解,为什么能达到判断的效果 。筛法也可以,我觉得这个函数的算法和筛法有点相近,所以想了解下

A一定包含B么? 

我认为,是!

我作了个图示,大致可以说明

素数是没有周期的
有一个计算小于n的素数的方法。
素数筛法:
1、建立1到n的集合Q
2、对于所有i<Sqrt(n)的整数,从Q中删除所有i的倍数,要留下i,
3、最后的集合为所求。

#include <stdio.h>
#include <math.h>

int prime(int num);

int main()
{
int num;
int flag = 0;
printf("请输入要判断的数:");
scanf("%d",&num);
if(num <= 1)
{
print