首页 > 其他分享 >华中科技大学新生赛

华中科技大学新生赛

时间:2023-10-29 16:11:06浏览次数:43  
标签:const 6% int 华中科技大学 新生 ans include

华中科技大学新生赛

Problem - F - Codeforces(取模运算)

题意:一个x如果不能被p整除则结果是x%p,如果可以被整除那么结果是n/p

现在问你n!%p等于多少

题解:

假如n=21,p=7;

我们一个分配率(1%p*2%p*3%p*4%p*5%p......*n%p)

我们发现

结果就是不超过p的一组数字连续相乘

因为7/7==1,14/7==2,不是0

所以结果就是

1*1*2*3*4*5*6%7

2*1*2*3*4*5*6%7

3*1*2*3*4*5*6%7

这个算出来就是最后的结果

所以我们预处理一下1到p-1乘积的前缀

结果就是

imp是快速幂,就是1到p-1的乘积出现的次数就对了

f[n%p]就是多出来那一部分的乘积

imp(f[p-1],n/p)*f[n%p]%p

最后因为在里面没有算能被整除的情况所以,我们递归一下(n/p)就是7%7==1,14%7==2这种情况就可以了

#include <bits/stdc++.h>
//#pragma GCC optimize("Ofast")
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <cmath>
//#define double long double
#define int long long
//#define endl '\n';
using namespace std;
const int N=1e6+7,M=1e1;
const int INF = 0x3f3f3f3f;
const int mod=100003;
typedef pair<int,int> PII;

int f[N];
int t,p;
int imp(int a,int k)
{
    int ans=1;
    while (k)
    {
        if(k&1) ans=ans*a%p;
        k>>=1;
        a=a*a%p;
    }
    return ans;
}

int kpl(int x)
{
    if(x<p) return f[x];
    int k=imp(f[p-1],x/p)*f[x%p]%p;
    return k*kpl(x/p)%p;
}

void solve()
{
   scanf("%lld %lld",&t,&p);
   int x;
   f[0]=f[1]=1;
   for(int i=2;i<p;i++)
   {
       f[i]=f[i-1]*i%p;
   }
    while (t--)
    {
        scanf("%lld",&x);
        int ans;
        ans=kpl(x);
        cout<<ans<<'\n';
    }
}
signed main(){
//    std::ios::sync_with_stdio(false);
//    std::cin.tie(nullptr);
    int T=1;
//    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

 

标签:const,6%,int,华中科技大学,新生,ans,include
From: https://www.cnblogs.com/whatdo/p/17795968.html

相关文章

  • 【pwn】[SWPUCTF 2021 新生赛]nc签到 --shell过滤字符
    附件下载打开:importosart='''  (( "####@@!!$$  ))    `#####@@!$$` ))  (( '####@!!$:  (( ,####@!!$: ))    .###@!!$:    `##@@!$:    `#@!!$ !@#  `#@!$:   @#$  #$  `#@!$:   !@!......
  • 高考专业容忍度降低—— 暨南大学81名大一新生放弃入学资格
      看到一个新闻:https://news.cqnews.net/1/detail/1167749247168651264/web/content_1167749247168651264.html    ===========================================  由于曾经物质基础、经济基础的限制,很多人只有一次高考的机会,很多家庭式负担不起也接受不起gap......
  • 华科新生赛题解
    因为学校里面写代码的条件不足,比如教学楼里面使用键盘就会被盯着看。感觉有点点自闭。早知道退学了。不知道现在退学是不是算晚。昨天好兄弟车昱辉说你是在学习又不是在打游戏,但是我还是很羞涩。Abfs,需要把已经搜到的点在枚举1到n的时候去掉,所以可以使用并查集。或者链表......
  • 2023级HAUT新生周赛题解汇总
    2023级HAUT新生周赛(零)熟悉周赛规则专场:2023级HAUT新生周赛(一)@21级学长专场(张子豪,张鑫,李昊阳):2023级HAUT新生周赛(二)@曹瑞峰专场:2023级HAUT新生周赛(三)@22级学姐专场(杨焱,刘振歌,周欣滢):2023级HAUT新生周赛(四)@牛浩然专场:2023级HAUT新生周赛(五)@陈兰锴专场:......
  • 2023 年华中科技大学程序设计竞赛新生赛
    2023年华中科技大学程序设计竞赛新生赛P9774[HUSTFC2023]新取模运算-洛谷|计算机科学教育新生态(luogu.com.cn)\(n!\%p\),易知\(1\simn\%p\)为\(1,2,3\dotsp-1,0,1,2\dots\),所以我们可以预处理出\(1\simp-1\)的阶乘,那么答案就是\((p-1)!^{\frac{n}{p}}\t......
  • 鲜花:奔跑在阳光下,重获新生。
    今天早上称重,虽然是意料之中但还是很惊喜:终于掉破80kg了。在noi2023时我还是90kg+。事实上,这个数字应该在至少两年内都没变化过。//noi2023以后终于有时间来关注一下自己被oi折磨得残破不堪的躯体。我决定试试跑步。慢跑。第一次迈开腿是23.08.02。那天我起得比......
  • 新生代
       新生代内存是JavaScript中用于存储对象的内存区域。它具有以下特点:-内存区域较小-垃圾回收频繁在新生代中,分配内存非常简单。只需保存一个指向内存区的指针,并根据新对象的大小进行递增即可。当指针到达新生代内存区的末尾时,就会触发一次清理操作。新生代内存使用Sca......
  • 武汉大学2023年新生程序设计竞赛
    A-教科书般的亵渎#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongusingvi=vector<int>;usingpii=pair<int,int>;usingi32=int32_t;int32_tmain(){intn;cin>>n;via(n);for(auto&i:......
  • [SWPUCTF 2021 新生赛]老鼠走迷宫(详细版
    附件下载https://wwvc.lanzouj.com/iYLez1br84jg解题思路用pyinstxtrator解析exe重点:将无后缀的5先修改后缀为pyc,然后随便找一个pyc文件补齐5.pyc的前16位十六进制数值(这道题以struct.pyc为例)将.pyc反编译为.py找到maze,从而找到最短路径改后缀下载附件,拿到一个无后缀的......
  • P4062 [Code+#1] Yazid 的新生舞会
    题外话我记得第一次看见这道题是几个月前刚开始集训的时候,当时一点思路都没有,但是今天自己做出来了,很喜欢这种感觉!\(\text{Links}\)原题传送门可能更好的阅读体验题意求给定序列中有多少个子区间满足众数出现次数严格大于区间长度的一半。题解题目要求满足条件的子区间......