c语言程序设计 关于回文素数
发布网友
发布时间:2022-05-26 04:48
我来回答
共2个回答
热心网友
时间:2023-10-01 02:43
在程序的开头加入#include
下面是fun函数:
int
fun(int
mm,int
b[max])
{
int
i,mmm,n=0;
for(mmm=2;mmm<=mm;mmm++)
{
for(i=2;i<=sqrt(mmm);i++)
if(mmm%i==0)
break;
if(i>sqrt(mmm))
{
b[n]=mmm;
n+=1;
}
}
return
n;
}
分析:
如果mm<=1,外循环不启动,直接返回n,此时n=0
如果mm=2,外循环启动,内循环i<=sqrt(mmm)的条件不满足,不启动,内循环下面的判断条件满足,于是让b[n]=mmm,n+=1,即找到一个符合条件的素数,此时b[n]既b[0]=2,然后n+=1,表示符合条件的素数的个数加1
同样,当mm=3的时候,内循环由于条件不满足,是不会执行的,但是在内循环下面的条件判断都满足,所以会把结果保存在n和b[n]里面,这时,外循环要执行2次
当mm>3时,内循环也会启动,但是要等内循环结束之后i的值满足条件的才是素数,程序的可靠信完全可以放心
刚刚又重新分析了一遍代码,稍微改了改,没问题了
热心网友
时间:2023-10-01 02:43
/*
回文素数——指对一个素数n从左到右和从右到左读其结果是一样
的,既称为该素数为回文素数。绝对素数——一个素数当它的数字位
置对换后仍为素数,这样的数称之为绝对素数。现编程实现:输入一
个整数,如果为奇数,找出不超过1000的回文素数和不超过100的绝
对素数。如果为10-20之间的偶数,将其分解为两个素数之和
*/
#include<stdio.h>
void main(void)
{
int prime(int);
int n,i;
printf("输入一个数n: ");
scanf("%d",&n);
if(n%2)
{
for(i=100;i<1000;i++)
if(prime(i)&&prime(i%10*100+((i/10)%10)*10+i/100))
printf("%6d ",i);
}
else if((n>=10)&&(n<=20))
for(i=2;i<=n/2;i++)
if(prime(i)&&prime(n-i))
printf("%8d=%8d+%8d\n",n,i,n-i);
return;
}
int prime(int n)
{
int i;
for(i=2;i<n;i++)
if(n%i==0)break;
return i==n;
}