标签:丑数 return int 素数 解题 100 dp 回文
文章目录
一、回文素数
题目描述
求出大于或等于 N 的最小回文素数。
回顾一下,如果一个数大于 1,且其因数只有 1 和它自身,那么这个数是素数。
例如,2,3,5,7,11 以及 13 是素数。
回顾一下,如果一个数从左往右读与从右往左读是一样的,那么这个数是回文数。
例如,12321 是回文数。
思路分析
从n开始分别判断n是否是回文素数,同时注意不存在长度为8的素数,直接跳过即可。
具体代码
class Solution {
public:
int reverse(int n){
int ans=0;
while(n){
ans=ans*10+n%10;
n/=10;
}
return ans;
}
bool isPrime(int n){
if(n==1) return false;
for(int i=2;i<=sqrt(n);i++){
if(n%i==0){
return false;
}
}
return true;
}
int primePalindrome(int n) {
while(1){
if(n==reverse(n) && isPrime(n)){
return n;
}
n++;
if (10000000 < n && n < 100000000)
n = 100000000;
}
}
};
二、丑数
题目描述
我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。
思路分析
丑数只包含质因子2、3、5,所以对于一个丑数来说,它一定是一个丑数乘以2或者3或者5.我们可以设置三个指针分别指向乘以2、3、5,我们取其中最小的数保存到对应的dp [i] 中,dp[i] 表示:第i个丑数。注意1是第一个丑数,我们从前循环遍历到n即可。
具体代码
class Solution {
public:
int dp[1692];
int nthUglyNumber(int n) {
dp[1]=1;
int p2=1,p3=1,p5=1;
for(int i=2;i<=n;i++){
dp[i]=min(dp[p2]*2,min(dp[p3]*3,dp[p5]*5));
if(dp[i]==dp[p2]*2){
p2++;
}
if(dp[i]==dp[p3]*3){
p3++;
}
if(dp[i]==dp[p5]*5){
p5++;
}
}
return dp[n];
}
};
标签:丑数,return,int,素数,解题,100,dp,回文 来源: https://blog.csdn.net/weixin_49393180/article/details/122157469
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。