文章目录
一、素数的介绍
素数(质数)是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。素数被运用在密码学,汽车变速箱齿轮设计,导弹鱼雷等领域,具有重要意义。下面让我们一起进入C语言的副本刷怪吧!
二、素数的常见习题
1.判断素数
代码如下(示例):其中的Flag是我们的标志位,用于if语句判断。‘’
#include <stdio.h>
int prime(int n)//判断素数函数
{
int i,Flag = 1;
for(i=2;i<n;i++)//从2开始遍历到n-1
{
if(n%i==0)//判断是否可以被其他数整除
{
Flag = 0;
break;//跳出循环
}
}
return Flag;//返回值
}
int main()
{
int m;
printf("请输入一个数\n");
scanf("%d",&m);
if(prime(m))
printf("%d是素数\n",m);
else
printf("%d不是素数\n",m);
return 0;
}
实际上,我们可以通过数学知识简化,遍历次数,只需从2~sqrt(n),达到的效果是一样的,注意这里可以等于sqrt(n)。
改进后 代码如下(示例):
#include <stdio.h>
#include <math.h>
int prime(int n)
{
int i,Flag = 1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
Flag = 0;
break;
}
}
return Flag;
}
int main()
{
int m;
printf("请输入一个数\n");
scanf("%d",&m);
if(prime(m))
printf("%d是素数\n",m);
else
printf("%d不是素数\n",m);
return 0;
}
这个判断衍生出来的题型我觉得大家都应该没问题了。
如:求100以内的所有素数。
代码如下
int main()
{
int i,j=0;
for(i=2;i<=100;i++)
{
if(prime(i))
{
printf("%d\t",i);
if(++j % 10==0)printf("\n");
}
}
}
2、求一个数的素数因子
外层的for是循环除数,里层筛选除得尽的数。for循环上自增只到加到初的尽的数,进入while里判断是不是素数因子,如果是输出,给你赋新的n/i;while再次判断,是否除得尽,到最后除不尽,再跳出while,转到for循环,改变除数,依次内推,直到最后n为1,停止。
代码如下
#include <stdio.h>
#include <math.h>
int prime(int n)
{
int i,Flag = 1;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
Flag = 0;
break;
}
}
return Flag;
}
int main()//分解素数
{
int m,i;
printf("请输入一个数\n");
scanf("%d",&m);
printf("%d =",m);
for(i=2;i<=m;i++)//从2遍历到数本身
{
while(m%i==0)//while循环可以分解平方项
{
if(prime(i))
printf(" %d ",i);
m = m/i;
}
}
return 0;
}
总结
这期给大家介绍了素数常见题的两种场景,希望大家可以学有所得,收获满满,下期准备写一下指针学习心得,今天就到这里了,备考!