当前位置:首页 » 编程语言 » 回文素数c语言

回文素数c语言

发布时间: 2023-02-17 15:55:49

1. c语言:查找回文素数

/*

m = 900102
最接近的回文素数是1003001。
Press any key to continue

*/

#include<stdio.h>
#include<math.h>
intIsPalindromeNum(intnum){
chars[10],i=0,j;
while(num>0){
s[i]=num%10+'0';
num=num/10;
i++;
}
s[i]='';
i--;
for(j=0;j<(i+1)/2;j++)
if(s[j]!=s[i-j])return0;
return1;
}
longgmval(intm){
inti,j,flag;
if(m%2==0)m++;
for(i=m;i<10*m;i+=2){
flag=1;
for(j=2;j<=sqrt(i);j++){
if(i%j==0){
flag=0;
break;
}
}
if(flag&&IsPalindromeNum(i))
returni;
}
return0;
}
intmain(){
unsignedlongm,res;
printf("m=");
scanf("%d",&m);
res=gmval(m);
if(res)printf("最接近%的回文素数是%d。 ",res);
elseprintf("在%d--%d范围内没有找到回文素数。 ",m,10*m);
return0;
}

2. c语言 指定范围内的回文素数,题目如下,要求1S内完成的

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <Windows.h>
#pragma comment(lib,"Winmm.lib")
/*****************************************************************************************
我的处理器是Core i3 350M,2.26G,执行3.2亿次纯加法运算的时间为1s左右。
最耗时间的就是素数的判断,回文数的判断反倒很简单。我使用miller_rabin算法进行了对比,
miller_rabin在处理这些小的数上不具备优势,反而慢了近40%
为素数建立索引表不是个好选择,因为1到1亿之间的素数个数为576万多,会导致文件很大而且频繁地进行
查找也耗时的。如果用哈希表到可以稍微考虑考虑
发现1到1已之间的回文数的数量是极少的,只有5916个(除了能被2被3被5整除是数)。在判断是否为回文数
后判断素数,总共用时5500ms左右,其中判断素数所用的时间(找到回文数的时间为5000ms左右)只有10%左右。
所以问题得解,使用回文数的索引表。范围是5到1亿。
还有某些代码可以优化,在提高那么一点速度。
如果发现有地方有错误,请见谅。
****************************************************************************************/

//判断素数,稍有改建,miller_rabin算法在算1亿以内的数不如这个经典的算法快
bool IsPrime(long n)
{
long i=sqrt(n);
for(i;i>=7;i--)
if(n%i==0)
{
return false;

}
return true;
}

//回文数判断经典算法
bool IsPalindrome(long m)
{
long i, n;
i=m;
n=0;
while(i)
{
n=n*10+i%10;
i/=10;
}
return m==n; //返回true说明就是回文数了。
}

////////////////////////////////////////////////////
//*
long Arry[6000];//顺序表存储读取的回文数
int ptr;//指针

int main()
{
time_t start,finish,r;
long i;
long count=0;

FILE* fp;
if(!(fp=fopen("data.txt","r")))
{
printf("记录回文数的文件无法打开,请检查是否存在\n");
return 0;
}
ptr=0;
while(!feof(fp))
{
fscanf(fp,"%ld",Arry+ptr);
ptr++;
}
ptr-=1;//多弄出来1个记录
start=timeGetTime();
for(i=0;i<ptr;i++)
{
if(IsPrime(Arry[i])){
printf("%d ",Arry[i]);
count++;
if(count%8==0) printf("\n");
}
}
finish=timeGetTime();
r=finish-start;
printf("找到的符合要求的数的个数为:%d\n",count);
printf("用时:%d\n",r);
return 0;
}
//*

/*旧版本的主函数,先判断是否为回文数后判断是否为素数
int main()
{
time_t start,finish,r;
long i;
long count=0;
//if(miller_rabin(99999989,6))
// printf("Y\n");
//return 0;
start=timeGetTime();
for(i=5;i<=100000000;i+=2)
{
if(i%3==0) continue;
if(i%5==0) continue;
if(IsPalindrome(i)){
//if(IsPrime(i)){
//printf("%d ",i);
count++;
//}
}
}
finish=timeGetTime();
r=finish-start;
printf("找到的符合要求的数的个数为:%d\n",count);
printf("用时:%dms\n",r);
return 0;
}
//*/

/*使用它建立记录回文数的文件,去除了能被2能被3能被5整除的数
int main()
{
FILE* fp;
fp=fopen("data.txt","w");
long i;
long count=0;
for(i=5;i<=100000000;i+=2)
{
if(i%3==0) continue;
if(i%5==0) continue;
if(IsPalindrome(i)){
count++;
fprintf(fp,"%d ",i);
printf("进度:%d%%\r",i/1000000);
}

}
printf("文件建立完成!,写入的回文数个数为%d\n",count);
}
//*/

3. C语言回文素数

1、 用筛选法比较好。效率应该会提高。
但是考虑到n大小问题! 小的就不太适合了!

4. c语言程序设计 关于回文素数

/*
回文素数——指对一个素数n从左到右和从右到左读其结果是一样
的,既称为该素数为回文素数。绝对素数——一个素数当它的数字位
置对换后仍为素数,这样的数称之为绝对素数。现编程实现:输入一
个整数,如果为奇数,找出不超过1000的回文素数和不超过100的绝
对素数。如果为10-20之间的偶数,将其分解为两个素数之和
*/
#include<stdio.h>
voidmain(void)
{
intprime(int);
intn,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);
}
elseif((n>=10)&&(n<=20))
for(i=2;i<=n/2;i++)
if(prime(i)&&prime(n-i))
printf("%8d=%8d+%8d ",n,i,n-i);
return;
}
intprime(intn)
{
inti;
for(i=2;i<n;i++)
if(n%i==0)break;
returni==n;
}

5. c语言程序设计 关于回文素数

在程序的开头加入#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的值满足条件的才是素数,程序的可靠信完全可以放心
刚刚又重新分析了一遍代码,稍微改了改,没问题了

6. C语言问题(回文素数)

#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是回文数 ",i);

}else if(i<=999)

{

a=i/100;

b=(i%100)%10;

if(a==b)

printf("%4d是回文数 ",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是回文数 ",i);

}

}

}


}

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

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

7. C语言问题 【函数与过程】回文素数

两个子函数搞定
求素数
int sushu(int n)
{
int i;
if(n<2)
return 0;
for(i=0;i*i<=n;i++)
if(n%i==0)
return 0;
return 1;

}
求回文
int huiwen(int n)
{
int a[100];
int i=0,j=0,m=n;
while(m)
{
a[i]=m%10;
m/=10;
i++;
}
i--;
while(a[i--]!=a[j++])
return 0;
return 1;
}

判断这个数,用一个if搞定

if(sushu(x)&&huiwen(x))
处理代码就可以

8. c语言编程:输出m~n之间的回文素数

程序开始部分没什么问题,结尾一个接一个

是自己想乱了还是着急了?

如果刚学C 最好还是先列个流程 然后再写,不容易出错

改正后的程序如下,原因见注释

#include<stdio.h>
intmain()
{
intm,n,c,b,k,p,q,r,leap;
scanf("%d%d",&m,&n);
r=0;
leap=0;
for(k=m;k>=m&&k<=n;k++)
{
b=0;
p=k;
while(k>0)
{
c=k%10;
b=b*10+c;
k=k/10;
}
if(b==p)
{
for(q=2;q<p;q++)
if(p%q==0)
break;
if(q==p)
{
leap=1;
r=r+1;
}
else
leap=0;
}
else
leap=0;
k=p;//恢复k的值,下次循环用用的
//输出语句移到循环内,对每个回文素数做输出
if(leap==1)//==判断
{//只有本身为回文素数时,判断是否需要输出换行
printf("%d",p);
if(r%5==0)//一次判断不然死循环输出换行了
printf(" ");
}
}
return0;
}

9. C语言:从给出的数据中统计出既是回文数又是素数的数

#include<stdio.h>
inthw(intn)
{inty=0,n1;
n1=n;
for(;n;n/=10)y=y*10+n%10;
returny==n1;
}
intprime(intn)
{inti;
for(i=2;i*i<=n;i++)
if(n%i==0)return0;
returnn>1;
}
intmain()
{intn,c='',num=0;
scanf("%d%c",&n,&c);
while(1)
{if(hw(n)&&prime(n))
num++;
if(c==' ')break;
scanf("%d%c",&n,&c);
}
printf("%d ",num);
return0;
}

热点内容
电脑配置都有哪些问题 发布:2024-11-08 11:15:29 浏览:727
新浪微博敏感词数据库 发布:2024-11-08 11:03:22 浏览:472
linux的终端软件 发布:2024-11-08 11:01:46 浏览:204
主机如何把密码关掉 发布:2024-11-08 10:36:25 浏览:720
安卓软件如何锁定 发布:2024-11-08 10:30:27 浏览:709
sql定时执行语句 发布:2024-11-08 10:29:36 浏览:673
迈锐宝xl值得入手哪个配置 发布:2024-11-08 10:14:13 浏览:634
寻欢加密 发布:2024-11-08 10:02:57 浏览:353
拼单源码 发布:2024-11-08 09:58:24 浏览:143
linux服务器存储 发布:2024-11-08 09:51:40 浏览:473