所以这道题,嗯,太相信模板了,FOR循环里面用了INT ,难怪超时。LONG LONG不确定够不够大,不够就再加,变成UNSIGNED LONG LONG.
#include <iostream>
#include <cstdio>
#include <cmath>
#include <vector>
#include <cstring>
#include <algorithm>
#include <string>
#include <set>
#include <functional>
#include <numeric>
#include <sstream>
#include <stack>
#include <map>
#include <queue>
using namespace std;
typedef unsigned long long ll;
ll make_pow(ll x,ll n)
{
ll res =1;
while(n>0)
{
if(n&1)res = res*x;
x = x*x;
n>>=1;
}
return res;
}
bool isprime(ll n)
{
for(ll i=2;i*i<=n;i++)
if(n%i==0)return false;
return n!=1;
}
int main()
{
ll n,b;
while(scanf("%lld%lld",&b,&n)==2)
{
if(isprime((make_pow(b,n)-1)/(b-1)))
printf("YES\n");
else
printf("NO\n");
}
return 0;
}