计蒜客 - T3126

题目

阿克克希是求婚总动员的队长,他通过自己的双手,成就了无数年轻人的梦,但他却留下了悲伤的泪水。

求婚是非常费力的,他手上有 P−1个求婚请求,这 i 个人的编号为 [1,P−1]

面对第 i个人他的求婚麻烦值为:i 在模 P意义下的逆元。他现在想知道总的麻烦值。

tips:
如果有任意一个编号 i 在模 P 意义下不存在逆元,请输出 AKCniubi

输入格式

一行一个数 P

表示求婚请求总数
输出格式

一行一个数表示总麻烦值

若有数存在无逆元的情况,输出 AKCniubi

数据范围

对于 30%
的数据,P<=1000000

对于 50%
的数据,P<=10000000

对于 100%
的数据,P<=231

Sample Input

3

Sample Output

3

解题

1.根据逆元的定义,gcd(i,p)==1才有逆元,而i的值是1~p-1,所以对于非质数来说,一定存在i与p不互质,也就是不存在逆元,直接AKCniubi
2.然后看质数的i的逆元
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从上面很容易看出,和就是1+2+3+…+p-1
所以实际上这是一个素数判断+找规律的水题

3.要注意当p==2时,逆元不符合这个规律,要另外写

代码

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


ll inv2(ll a,ll m)
{
    return a==1?1:(m-m/a)*inv2(m%a,m)%m;
}

bool isprime(ll a)
{
    for(ll i=2;i<=sqrt(a);i++)
        if(a%i==0)
            return false;
    return true;
}

int main()
{
    ll p;
    cin>>p;
    if(!isprime(p))
    {
        cout<<"AKCniubi";
        return 0;
    }
    /*for(int i=1;i<p;i++)
        cout<<inv2(i,p)<<" ";
    cout<<endl;*/
    ll sum=(p-1)/2*p;
    if(p==2)
        sum=1;

    cout<<sum;

	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值