先建立一个初始的素数表,例如:100以内的素数数组,用来快速判断是否是素数对于超过100的素数,算法,用不大于根号n的素数,对n进行试除,如果都不能除尽,则为素数。
#include <stdio.h>
#include <math.h>
//判断是否为素数的函数
int isPrime(int n)
{
int i=2;
while(i<=(int)sqrt(n))
{
if(n%i == 0)
return 0; //不是素数,直接返回0
else
i++;
}
return 1;
}
int main()
{
int n;
printf("输入一个正整数: ");
scanf("%d",&n);
if(isPrime(n))
printf("%d is a prime number\n",n);
else
printf("%d is not a prime number\n",n);
return 0;
}
扩展资料;
首先,本文英文字母都表示整数,上半部B 》3N 》W,下半部B 》W 》3N。大于3的素数只有6N-1和6N+1两种形式,我们只需判定这两种数是素数还是合数即可。
命题 1 对于B=36N+1 形数而言。
若不定方程(3N)^2+N-(B-1)/36=W^2 有整数解,
则 6(3N-W)+1 是小因子数;6(3N+W)+1 是大因子数。
若不定方程 (3N)^2-N-(B-1)/36=W^2 有整数解,
则 6(3N-W)-1 是小因子数;6(3N+W)-1 是大因子数。
参考资料来源:百度百科-质数
素数
表,例如:100以内的素数数组,用来快速判断是否是素数
对于超过100的素数,
算法,用不大于根号n的素数,对n进行试除,如果都不能除尽,则为素数
isprime(int
n)
//
判断n是否为素数
{
if(n<2)
return
0;
//
小于2的肯定是合数
int
i;
for(i=2;i*i<=n;i++)
if(n%i==0)
//
如果找到一个可整除它的数,那么它就是合数了
return
0;
return
1;
}
int
main()
{
int
x;
scanf("%d",&x);
if(isprime(x))
printf("%d
is
a
prime\n",x);
else printf("%d
is
not
prime\n",x);
return
0;
}
#include
<stdio.h>
_Bool
sspd(unsigned
long
long
i);
int
main(void)
{
unsigned
long
long
x;
printf("
请输入
1
个正整数;");
while(scanf("%llu",&x)==1
&&
x)
{
if(sspd(x)
&&
x!=1
||
x==2)
printf("
%llu
是素数\n\n",x);
else
printf("
%llu
不是素数\n\n",x);
printf("
请输入
1
个正整数;");
}
return
0;
}
_Bool
sspd(unsigned
long
long
srs)
//必须:srs>2
{
unsigned
long
long
div;
for(div=2;div*div<srs+1;div++)
if(!(srs%div))
return
0;
return
1;
}
using
namespace
std;
bool
isSushu(int);//检查是否是素数
void
main()
{
int
a;
cout<<"请输入数字:";
cin>>a;
if
(isSushu(a))
{
cout<<a<<"是一个素数"<<endl;
}
else
{
cout<<a<<"不是一个素数"<<endl;
}
}
bool
isSushu(int
a)
{
if
(a==2)
{
return
true;
}
for(int
i=2;i<a;i++)
{
if
(a%i==0)
{
return
false;
}
}
return
true;
}
广告 您可能关注的内容 |