c++简单数论:求n^n的最大位上的数字和个位上的数字

求个位上的数字

比较简单,就是单独拿个位的数字来快速幂取模

#include <bits/stdc++.h>

using namespace std;
int ksm(long long x,int y,int m)//快速幂取模
{
    int t;
    if(y==0)
        t=1;
    else
    {
        t=ksm(x*x%m,y/2,m)%m;
        if(y&1)
            t=t*x%m;
    }
    return t;
}
int main()
{
    int t;
    while(cin >> t)
    {
        int n;
        while(t--)
        {
            cin >> n;
            long long x=n%10;//传入快速幂的是longlong
            int ans=ksm(x,n,10);
            cout << ans << endl ;
        }
    }
    return 0;
}

.

求n^n的最大位上的数字

求一个x位的数字n^n的最大位上的数字求法:
设最大位的数字位a,则有 a=n^n/pow(10,x-1) 的取整值
如3^3的最大位=27/10的取整=2
其中,我们可以将分母再用一个pow来表示出来。
假定y=log10(n^n)=n*log10(n) (y位一个double)
n^n=pow(10,y)
所以我们所求的a就能表示为
a=pow(10,y)/pow(10,x-1)=(int)pow(10,y-(x-1))
再将x和y带入表达式即可

#include <bits/stdc++.h>

using namespace std;
int main()
{
    int t;
    while(cin >> t)
    {
        double n;
        while(t--)
        {
            cin >> n;
            double x1=n*log10(n);   //  10的x1幂就是n^n
            long long qua=(long long)x1+1;   //数据是1e9的话这里要用longlong  +1可以优化不要
            int ans;
            ans=(int)pow(10,x1-(qua-1));   //这里如果用double装,也可以求前x位
            cout << ans << endl ;
        }
    }
    return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值