當前位置:首頁 » 編程語言 » 迴文素數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 14:06:54 瀏覽:371
低頻訪問存儲 發布:2024-11-08 14:05:31 瀏覽:679
html5坦克大戰源碼 發布:2024-11-08 14:04:35 瀏覽:406
輸錯密碼鎖定什麼意思 發布:2024-11-08 14:02:07 瀏覽:541
存儲計算邏輯 發布:2024-11-08 13:49:35 瀏覽:543
java演算法排序演算法 發布:2024-11-08 13:42:20 瀏覽:883
u盤隨身系統linux 發布:2024-11-08 13:34:34 瀏覽:411
b1422壓縮機鎖定 發布:2024-11-08 13:32:43 瀏覽:635
上傳按鈕圖片 發布:2024-11-08 13:30:57 瀏覽:920
安卓手機相機如何拍攝短視頻 發布:2024-11-08 13:28:42 瀏覽:411