返回首页 返回题库

原根判断

C++ 中等 GESP五级真题 #数论#快速幂#质因数分解

题目描述

题面描述

小A知道,对于质数而言,的原根是满足以下条件的正整数:

  • ;
  • 对于任意 均有。

其中表示除以的余数。

小A现在有一个整数,请你帮他判断是不是的原根。

输入格式

第一行,一个正整数,表示测试数据组数。

每组测试数据包含一行,两个正整数。

输出格式

对于每组测试数据,输出一行,如果是的原根则输出Yes,否则输出No。

样例1

输入:

3
3 998244353
5 998244353
7 998244353

输出:

Yes
Yes
No

数据范围

对于的测试点,保证。

对于所有测试点,保证,, ,为质数。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察数论中原根的判定方法,核心思路是:要验证a是否是质数p的原根,只需对p-1的所有不同质因数q,验证a^((p-1)/q) mod p都不等于1即可,无需枚举所有1<=i<p-1。需要用到快速幂算法来高效计算大指数的模运算,以及质因数分解来获取p-1的所有不同质因子。注意数据范围较大,计算过程中要使用64位整数防止溢出。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 6 浏览

讨论(0)