首页 > 其他分享 >P2480 [SDOI2010] 古代猪文

P2480 [SDOI2010] 古代猪文

时间:2024-10-15 20:48:42浏览次数:6  
标签:猪文 return P2480 LL SDOI2010 ans mod include define

简单数学题。

显然答案是 \(g^{\sum_{d|n}C_n^d}\)。

考虑到 \(mod\) 是质数,所以 \(g^{mod-1}\equiv 1\pmod {mod}\),那么考虑算出指数模上 \(mod - 1\)。

注意到 \(mod - 1\) 并不是质数,显然可以质因数分解后 CRT 合并。

于是就做完了。

Code

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <bitset>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <cstring>
#include <sstream>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <cassert>
#include <chrono>
#include <random>
#define x first
#define y second
#define pb push_back
#define eb emplace_back
#define pf push_front
#define desktop "C:\\Users\\MPC\\Desktop\\"
#define IOS ios :: sync_with_stdio (false),cin.tie (0),cout.tie (0)
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair <int,int> PII;
const int dx[] = {1,0,-1,0},dy[] = {0,-1,0,1};
template <typename T1,typename T2> bool tomax (T1 &x,T2 y) {
    if (y > x) return x = y,true;
    return false;
}
template <typename T1,typename T2> bool tomin (T1 &x,T2 y) {
    if (y < x) return x = y,true;
    return false;
}
LL power (LL a,LL b,LL p) {
    LL ans = 1;
    while (b) {
        if (b & 1) ans = ans * a % p;
        a = a * a % p;
        b >>= 1;
    }
    return ans;
}
int fastio = (IOS,0);
#define endl '\n'
#define puts(s) cout << s << endl
const int N = 50010,MOD = 999911658;
LL fact[N];
LL m[4] = {2,3,4679,35617};
LL a[4];
LL n,g;
void init (int p) {
	fact[0] = 1;
	for (int i = 1;i <= p;i++) fact[i] = fact[i - 1] * i % p;
}
LL C (int n,int m,int p) {
	if (n < m) return 0;
	return fact[n] * power (fact[m],p - 2,p) % p * power (fact[n - m],p - 2,p) % p;
}
LL lucas (int n,int m,int p) {
	if (n < m) return 0;
	if (!n) return 1;
	return lucas (n / p,m / p,p) * C (n % p,m % p,p) % p;
}
LL CRT () {
	LL ans = 0;
	for (int i = 0;i < 4;i++) ans = (ans + a[i] * (MOD / m[i]) % MOD * power (MOD / m[i],m[i] - 2,m[i])) % MOD;
	return ans;
}
int main () {
	cin >> n >> g;
	if (g % (MOD + 1) == 0) {
		puts ("0");
		return 0;
	}
	for (int k = 0;k < 4;k++) {
		init (m[k]);
		for (int i = 1;i <= n / i;i++) {
			if (n % i) continue;
			a[k] = (a[k] + lucas (n,i,m[k])) % m[k];
			if (n / i != i) a[k] = (a[k] + lucas (n,n / i,m[k])) % m[k];
		}
	}
	// cout << CRT () << endl;
	cout << power (g,CRT (),MOD + 1) << endl;;
	return 0;
}

标签:猪文,return,P2480,LL,SDOI2010,ans,mod,include,define
From: https://www.cnblogs.com/incra/p/18468412

相关文章

  • LOJ#2885. 「SDOI2010」猪国杀
    对拍器在此。https://www.luogu.com/discuss/81283献忠!AC代码modoiread{usestd::{io::{stdin,Read},ops::{Add,Mul,Neg},};pubfnnext()->u8{letmuta=stdin().lock();letmutc=[0u8];matcha......
  • [SDOI2010] 猪国杀
    猪国杀前言这道题是一道大模拟,个人认为还是挺锻炼码力的,所以本蒟蒻花一天的时间,爆肝一周的时间终于写完了。。。题意题目传送门游戏目的主猪/MP\texttt{MP}MP:自己......
  • 洛谷 P2478 [SDOI2010] 城市规划 题解
    题意简述仙人掌上求至少间隔两个位置的最大独立集。(仙人掌指,没有一条边在两个或以上的环里的无向图。)题目分析仙人掌就是树套环,即树上每个结点都是一个结点或环。那么将题目拆解成树上DP和环上DP即可。用tarjan缩点即可。树上DP先来看看树上DP。显然每个点有三个状......
  • P2482 [SDOI2010] 猪国杀 代码(暂未完成)
    #include<bits/stdc++.h>usingnamespacestd;namespacework{constintmaxPlayerNumber=11;intn,m,top=1;//玩家数,牌堆中的牌数,目前的牌堆顶unordered_map<string,int>transCard;//牌型编号unordered_map<string,int>transRole;//角色编号vector<int>c......
  • [SDOI2010] 大陆争霸
    [SDOI2010]大陆争霸屁话真多。第一眼看上去好像是最短路加了个强制拓扑。也就是说当结界还没被破坏的时候,已经到达的机器人只能干等着。在dijkstra中,机器人所在的点可以更新最短路。但拓扑图上该点的入度不为\(0\),即结界产生器没有被全部破坏时,不能入队。当炸掉一个结界......
  • [SDOI2010] 大陆争霸 题解
    [题目传送门](https://www.luogu.com.cn/problem/P2446)#解法由题可知,一个城市$u$保护城市$v$,所以建一条边$u\tov$表示城市$u$保护城市$v$,因为题目说保证有解,所以建的图一定是一个**有向无环图$DAG$**。再在此基础上求出最短路径。具体过程为设$dis_u$表示实际到达(攻破)$u$的最......
  • 【题解】Luogu-P2482 SDOI2010 猪国杀
    写了\(358\)行,\(11.94\mathrm{KB}\),有这么几个地方写挂了:反猪决斗一定选主猪。游戏结束判定是主猪死亡或全部反猪死亡。决斗可能被反杀,之后不能再出牌。点击查看代码#include<bits/stdc++.h>usingnamespacestd;intn,m;charCh[3];queue<char>Deck;in......
  • [SDOI2010] 代码拍卖会 题解
    [SDOI2010]代码拍卖会题解题目描述一个\(n,n\le10^{18}\)位数,仅由\(1\sim9\)组成,后一位数字一定大于等于前一位数字。求这些数中可以被\(m,m\le500\)整除的有多少,对\(999911659\)取模。解析这个数一定形如\(112334455677788999\)可以把它拆成\[\begin{aligned}......
  • [SDOI2010] 外星千足虫
    题意现在你面前摆有\(1\ldotsN\)编号的\(N\)只千足虫,你的任务是鉴定每只虫子所属的星球,但不允许亲自去数它们的足。Charles每次会在这\(N\)只千足虫中选定若干只放入“昆虫点足机”(theInsectFeetCounter,IFC)中,“点足机”会自动统计出其内所有昆虫足数之和。Charles......
  • [SDOI2010] 古代猪文
    题意求下列表达式的值\(\large{g^{\sum_{d|n}{\binom{n}{d}}}\pmod{999911659}}\)其中,\(n,d\leqslant10^9.\)Solution由欧拉定理可知,\(\large{原式=g^{\sum_{d|n}{\binom{n}{d}}\pmod{999911658}}}\)显然只需要考虑分子,考虑到\(999911658\)范围下的组合数无法......