社区讨论
采用和题解几乎完全一样的代码,结果还是错了?
SP288PON - Prime or Not参与者 6已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @m03n3xz3
- 此快照首次捕获于
- 2024/08/21 17:17 2 年前
- 此快照最后确认于
- 2024/08/21 20:01 2 年前
为什么?
CPP#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll prime[] = { 2,3,5,7,11,13,17,37 };
ll qmul(ll x, ll y, ll p)
{
ll sum = 0;
while (y)
{
if (y & 1)
sum = (sum + x) % p;
x = (x+ x) % p;
y >>= 1;
}
return sum;
}
ll qm(ll a, ll n, ll p)
{
ll sum = 1;
while (n)
{
if (n & 1)
sum = qmul(sum,a,p);
a=qmul(a,a,p);
n >>= 1;
}
return sum;
}
bool mr(ll a, ll p)
{
ll d = p - 1,r=0;
while (!(d & 1))
d >>= 1, r++;
ll z = qm(a, d, p);
if (z == 1)return 1;
for (int i = 0;i < r;i++)
{
if (z == p - 1)return true;
z = qmul(z,z,p);
}
return false;
}
void solve()
{
long long x;cin >> x;
if (x <= 1)
{
cout << "NO"<<"\n";
return;
}
for (int i = 0;i < 8;i++)
{
if (x == prime[i])
{
cout << "YES" << "\n";
return;
}
if(x%prime[i]==0)
{
cout << "NO" << "\n";
return;
}
if (!mr(prime[i],x))
{
cout << "NO" << "\n";
return;
}
}
cout << "YES"<<"\n";
return;
}
int main()
{
int t;cin >> t;
while (t--)
solve();
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...