Inverse Factorial

发布时间:2024年01月15日

阶乘 n!正整数的 n 被定义为所有小于或等于的正整数的乘积 n.

例如,21!=1?2?3?…?21=51090942171709440000.
计算一个小整数的阶乘是很简单的,而且你以前可能已经做过很多次了。然而,在这个问题中,您的任务被颠倒了。你被赋予了的价值 n! 你必须找到的价值 n.

输入
输入为 n 的阶乘, n!的位数最多为 1e6 位。

输出
输出的 n 的值

Input1
120
Output1
5

Input2
51090942171709440000
Output2
21

Input3
10888869450418352160768000000
Output
27

解析:

直接算就行

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10,p=1e9+7;
string s;
int qmi(int a,int k)
{
    int ans=1;
    while (k)
    {
        if (k&1) ans=ans*a%p;
        k >>=1;
        a=a*a%p;
    }
    return ans;
}
void solve()
{
    cin>>s;
    int x=0,id=0;
    for (int i=s.size()-1;i>=0;i--)
    {
        int k=s[i]-'0';
        x=(x%p+k%p*qmi(10,id)%p)%p;
        id++;
    }
    int ans=1,cnt=1;
    while (1)
    {
        ans=(ans%p*cnt%p)%p;
        if (ans==x) break;
        cnt++;
    }
    cout<<cnt;
}
signed main()
{
    ios;
    solve();
}

文章来源:https://blog.csdn.net/m0_74403543/article/details/135609000
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。