C语言问题(回文素数)
#include <stdio.h>
int main()
{
int i=0;
int j,k;
int s[1000];
for(j=1;j<10;j++) //11~99内的回文
{
s[i++]=j*11;
}
for(j=1;j<10;j++) //100~999内的回文
{
for(k=0;k<10;k++)
{
s[i++]=j*101+k*10;
}
}
for(j=1;j<10;j++) //1000~9999内的回文
{
for(k=0;k<10;k++)
{
s[i++]=j*1001+k*110;
}
}
for(j=0;j<i;j++) //判断是否是素数
{
for(k=2;k<(s[j]/2+1);k++)
{
if(s[j]%k==0)
printf("%5d",s[j]);
}
}
return 0;
}
//程序无法运行,请问哪里的错误??? 展开
#include<stdio.h>
#include<math.h>
#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);
}
}
}
}
自己编的一个,你看看。。
改了哈,这是正确的了,呵呵
你自己看看吧,你最后一个for是只要是和数就输出。
程序中的flag是标记的意思,flag=0,此数为质数,否则是和数。
还有,一个数在sqrt(可以表示为k*k<=s[j])内都没有因子,那么它一定是质数
// 最后一个for,整除表示“是合数”。改成下面这样
for(j=0;j<i;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]);
}
#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");
}