C语言问题(回文素数)

2025-03-23 15:29:20
推荐回答(4个)
回答1:

#include

#include

#define M 10000

void main()

{

int i,a,b,c,d,j,r;

for(i=11;i<=M-1;i++)

{

for(j=2;j<=sqrt(i);j++)

{

 r=i%j;

 if(r==0)

 break;

}

  if(r!=0)

  {

     if(i<=99)

{

   a=i%10;

b=i/10;

if(a==b)

printf("%4d是回文数\n",i);

}else if(i<=999)

{

   a=i/100;

b=(i%100)%10;

if(a==b)

printf("%4d是回文数\n",i);

}else 

{

   a=i/1000;

b=(i%1000)/100;

c=((i/10)%100)%10;

d=(((i%1000)%100)%10);

if(a==d&&b==c)

printf("%4d是回文数\n",i);

}

  }

}


}

自己编的一个,你看看。。

   改了哈,这是正确的了,呵呵

回答2:

你自己看看吧,你最后一个for是只要是和数就输出。

程序中的flag是标记的意思,flag=0,此数为质数,否则是和数。

还有,一个数在sqrt(可以表示为k*k<=s[j])内都没有因子,那么它一定是质数

回答3:

// 最后一个for,整除表示“是合数”。改成下面这样
for(j=0;j {
for(k=2;k<(s[j]/2+1);k++)
{
if(s[j]%k==0)
break;
}
if (k == s[j]/2 + 1)
    printf("%5d",s[j]);
}

回答4:

//#include "stdafx.h"//vc++6.0加上这一行.
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
bool prime(int n){
int i;
if(n<2) return false;
if(n==2 || n==3) return true;
if(!(n%2)) return false;
for(i=3; i*i<=n;i+=2)
if(!(n%i)) return false;
return true;
}

bool palindrome(int n){
char a[5]="",b[5]="";
itoa(n,a,10);
if(!strcmp(a,strrev(strcpy(b,a))))
return true;
return false;
}
void main(void){
int i,ln;
printf("%5d",2);
for(ln=1,i=3;i<10000;i+=2)
if(prime(i) && palindrome(i))
printf(++ln%5 ? "%5d" : "%5d\n",i);
printf("\n");
}