问题描述:
输入一个数,判断它是不是素数。
素数:一个大于1的自然数,除了1和它本身之外没有别的因数的数
注:1不是素数
源代码:
方法一:
输入n,遍历2到n之间的数能否被n整除,若整除则不是素数
#include <stdio.h>
#include <stdlib.h>
int PrimeNum(int n)
{
int i = 0;
if(n ==1)
{
return 0;
}
for(i=2; i<n;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n = 0;
int result;
printf("请输入要判断的数:");
scanf("%d",&n);
result = PrimeNum(n);
if(result==0)
{
printf("%d不是素数!",n);
}
else
{
printf("%d是素数!",n);
}
return 0;
}
这个方法时间复杂度和空间复杂的都比较高,可以进行优化
方法二:
遍历到根号n就行了,大大减小算法复杂度。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>//用于下面的sqrt(n)函数
int PrimeNum2(int n)
{
int i = 0;
if(n ==1)
{
return 0;
}
for(i=2; i<sqrt(n);i++)
{
if(n%i==0)
return 0;
}
return 1;
}
int main()
{
int n = 0;
int result;
printf("请输入要判断的数:");
scanf("%d",&n);
result = PrimeNum2(n);
if(result==0)
{
printf("%d不是素数!",n);
}
else
{
printf("%d是素数!",n);
}
return 0;
}
sqrt(n)函数意思是对n开方。它的头文件是#include <math.h>