判断素数的方法大全
质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。
一、直接暴力法求素数
n的素数的判断,我自己只想到了把2到n-1,实际上你要判断到n/2,任何合数最小的因子就是2,那最大的因子就是 n/2,再进一步其实sqrt(n)就够了。
bool prime_number(int a)
{
int i = 0;
for(i = 2;i<=(int)sqrt(a);i++)
{
if(a%i == 0)
{
return false;
}
}
return true;
}
二、筛选法求素数
用筛选法求n以内的素数。筛选法求解过程为:将2~n之间的正整数放在数组内存储,将数组中2之后的所有能被2整除的数清0,再将3之后的所有能被3整除的数清0 ,以此类推,直到n为止。数组中不为0 的数即为素数。
#include <stdio.h>
int main()
{
int n =0;
scanf("%d",&n);
int arr[100] = {0};
int i = 0;
for(i = 2;i<=n;i++)
{
arr[i-2] = i;
}
int count = 0;
for(i = 2; i < n; i++)
{
int j = 0;
for(j = i+1;j<=n;j++)
{
if(arr[j-2]%i == 0)
{
arr[j-2] = 0;
}
}
}
for(i = 2;i<=n;i++)
{
if(arr[i-2] != 0)
printf("%d ",arr[i-2]);
else
count++;
}
printf("\n");
printf("%d",count);
return 0;
}
三、用素数表来判断素数
如果一个数不能整除比它小的任何素数,那么这个数就是素数
//target:输入的要查找的数
//count:当前已知的素数个数
//PrimeArray:存放素数的数组
int isPrime(int target, int count, int* PrimeArray) {
int i = 0;
for (i = 0; i < count; i++) {
if (target % PrimeArray[i] == 0)
return 0;
}
return 1;
}
素数拓展:素数回文
回文既对称的意思,比如一个数字12321,以3为中点对称,如何判断一个素数的回文数字是否是素数呢,我们可以先求出这个素数的回文,再去判断
bool prime_number(long long a)
{
long long i = 0;
for(i = 2;i<=(long long )sqrt(a);i++)
{
if(a%i == 0)
{
return false;
}
}
return true;
}
long long huiwen(long long a)
{
long long tmp =a;
while(tmp /= 10)
{
a = a*10+ tmp%10;
}
return a;
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。