丑数,素数,斐波那契数列c++题解——优化算法

文章目录


丑数 

定义

  • 丑数:只包含质因数 235 的正整数
  • 从小到大的丑数:1,2,3,4,5,6,8,9,10,12,15,…

输入格式

        一个整数 n

输出格式

        一个整数。

样例

输入输出样例1

        输入 10

        输出 12

输入输出样例2

        输入 1

        输出 1

解释

         1 通常视为丑数。

说明提示:

        1 <= n <= 500000

AC代码

#include<bits/stdc++.h>
#define LL long long int
using namespace std;

int main(){
	int n;
	cin >> n;
    if(n<7){
    	cout << n << endl;
    	return 0;
	}
    vector<LL> fn(n);
    fn[0]=1;
    int t2=0,t3=0,t5=0;
        
    for(int i=1;i<n;i++)
    {
        LL tmp=min(fn[t2]*2,min(fn[t3]*3,fn[t5]*5));
        fn[i]=tmp;
        
        if(tmp==fn[t2]*2) t2++;
        if(tmp==fn[t3]*3) t3++;
        if(tmp==fn[t5]*5) t5++;  
    }
	cout << fn[n-1] << endl;
	
	return 0;
}

素数 

定义

        一个数的因数只有1和其本身的数

求解

        1.从2~n-1,遍历,若有整除的情况,便不是素数

        2.缩小范围,将上限变为\sqrt{n}

        3.埃氏筛求素数,一个素数的2倍、3倍等都一定不是素数

代码 

int sushu(int n) {
	if(n <= 1)
		return 0;
	if(n <= 3)
		return 1;
	if(n % 2 == 0 || n % 3 == 0)
		return 0;
	for(int i=5;i<=sqrt(n);i+=6) {
		if(n % i == 0 || n % (i+2) == 0)
			return 0;
	}
	return 1;
}

 斐波那契数列

定义

        规定F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2)(n>=3)

求解

        根据通项公式

        f(n) = \frac{1}{\sqrt{5}}(\frac{1+\sqrt{5}}{2})^{n}- \frac{1}{\sqrt{5}}(\frac{1-\sqrt{5}}{2})^{n}

代码 

long fibo(int n) {
    if(n<=1)
        return n;
    return (long)((pow((1+sqrt(5))/2,n)-pow((1-sqrt(5))/2,n))/sqrt(5));
}

  • 8
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值