回文素數:倆個方面一個是判斷是不是回文數,
另一個是判斷是不是素數。
來一個一個解決。
回文數:顧名思義,就是關於中心對稱。我們現在有一個簡單的方法,就是根據回文數的特性,就是從前面算和從后邊算都是可以算出同一個數的。
我們還需要知道一個數x,這個數(x%10)得到的是x的最后面的數大小。這個數(x/10)得到的是除了最后一位前面的數。
#include<iostream> using namespace std; int huiwen(int n){ int a,b; int x=0; a=n; while(a>0) { x=a%10+x*10; //這里算的是什么?是從個位數開始算,然后加起來。把后邊的數作為前面的數來算 a=a/10; //這里算什么?算除了最后那位前面的那幾位,目的是讓上面的那個式子可以算起來 } if(n==x) { return 1; } else { return 0; } } int sushu(int n){ int x=n; for(int i=2;i<n;i++) { if(x%i==0) return 0; } return 1; } int main(){ int a,b; cin>>a>>b; int n=0; for(int i=a;i<b;i++) { if(huiwen(i)&&sushu(i)) { n++; cout<<i<<"是回文素數"<<endl; } } cout<<"一共有"<<n<<"個"<<endl; return 0; }
這里還要注意倆個點:
1、這里的判斷回文數的:
x=x*10+a%10;就是判斷是否是回文數的這個數的末尾作為前面的來算。
a=a/10; 得到剛剛用過的最后得數來算前面剩下的啥樣。
2、判斷素數的:int sushu(int n){
int x=n; 1.注意這里需要有一個數來接n,因為在for循環里如果不接的話,n是一直在變化的,不可以 for(int i=2;i<n;i++) { if(x%i==0) return 0;2.還有這里,下面的return 1;是在for循環之外,為什么在外面是因為,如果你是else{return 1;}這樣的就是如果存在這個數%i不等於0,就會return 1;
舉個例子就是比如在這里27%4不等於0.但是不能說27就是素數。而27可以有3*9得到。所有要拉出去return 1; } return 1; }