-
从键盘输入一个整数,判断是否为素数。
素数:素数是除了1和其本身不能被其他数整除的数称为素数。
思路:
-
暴力方法:从2开始整除直到n-1,判断能否有被整除的数。
-
稍微简单:如果一个数要进行因式分解,必定最大的因子会小于等于n的开方。所以数目不需要达到n,而是sqrt(n)。
-
优化一点:任何除了2的偶数都可以被2整除。所以除数从3开始,同时增量为2。
-
更优一点:大于5的质数都为6x+1或6x-1。因为6x+2,6x+3,6x+4都可以被分解。
具体实现:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
bool isPrime(int n)
{
if(n==1) return false;
if(n==2) return true;
int i=2;
for(i;i<=n-1;i++){
if(n%i==0)
return false;
}
return true;
}
int main()
{
int n;
scanf("%d",&n);
if(isPrime(n))
printf("是素数!");
else
printf("不是素数!");
return 0;
}
bool isPrime(int n)
{
if(n==1) return false;
if(n==2) return true;
int i=2;
for(i;i<=sqrt(n);i++){
if(n%i==0)
return false;
}
return true;
}
bool isPrime(int n)
{
if(n==1) return false;
if(n==2) return true;
if(n%2==0)
return false;
int i=3;
for(i;i<=sqrt(n);i+=2){
if(n%i==0)
return false;
}
return true;
}
bool isPrime(int n)
{
if(n==1) return false;
if(n==2||n==3) return true;
if(n%2==0)
return false;
if(n%6==5||n%6==1)
return true;
else
return false;
}
注意点:
-
c语言中bool类型头文件是stdbool.h
-
头文件math.h
-
求解2到20000的所有完数。所有真因数的和等于本身的数字称为完数。
思路:
-
把所有因数表示出来,并且加起来和本身进行判断就行。
具体实现:
bool isAllNumber(int n)
{
if(n==1) return false;
int sum=0;
for(int i=1;i<n;i++)
{
if(n%i==0)
sum+=i;
}
if(sum==n)
return true;
return false;
}