C语言 N位绝对素数输出
绝对素数概念
首先,我们要了解什么是绝对素数。
素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。
了解了这个概念之后,我们一步步来写代码
素数
我们写一个简单的C语言素数程序,以100以内打个例子,oh,不,举个比方。
(可以根据自己的需要,改变for循环里面的值)
基本思路就是:给定一个数,根据定义,去除1和本身,我们从2开始用for循环遍历所有可能的数来判定是否为给定数的因数。
#include <stdio.h>
int main()
{
int m, k, i;
for(m=1;m<100;m++)
{
k=m-1;
for(i=2;i<=k;i++) //遍历所有除本身之外的,可能的因数,即2 ~ m-1
{
if(m%i==0) break; //如果碰到因数,跳出循环
}
if(i==m) printf("%d ",m); //如果是素数的话,for循环最后的i会变成m,即最大因数是本身
}
system("pause");
return 0;
}
OK,有了素数的程序,和绝对素数的概念,我们只需要嵌套循环再写一个逆序,并判定一次就可以了。
绝对素数
这里以求所有四位绝对素数为例,即从1000~9999
#include <stdio.h>
int main()
{
int m, k, i;
int m1,m2,m3,m4,m5;
for(m=1000;m<10000;m++)
{
k=m-1;
for(i=2;i<=k;i++) //遍历所有除本身之外的,可能的因数,即2 ~ m-1
{
if(m%i==0) break; //如果碰到因数,跳出循环
}
if(i==m)
{
m1=m/1000;
m2=m%1000/100;
m3=m/100%10;
m4=m/10;
m5=m4*1000+m3*100+m2*10+m1; //逆序数
k=m5-1;
for(i=2;i<=k;i++) //求证逆序数是否为素数
{
if(m5%i==0) break;
}
if(i==m5) printf("%d ",m);
}
}
system("pause");
return 0;
}
一个减少运算量的小tip
可以用 k=sqrt(m);
来代替 k=m-1;
原因就不多说啦,不懂的话随便找个小一点的数模拟一下。
现学现卖,欢迎指正,hh。