题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3758
分析:
主要是转换成十进制以及素数的判断,要使用unsigned long long(或unsigned __int64),范围为[0, 2^64)。
C++实现:
/*
Sample Input
3 3
2 4
2 1
10 2
Sample Output
YES
NO
NO
YES */
#include <stdio.h>
typedef unsigned long long ULL;
int isPrime(int b, int N)
{
ULL num = 1;
for(int i = 0; i < N; ++i)
{
num *= b;
}
num = (num - 1) / (b - 1);
if(num == 1)
{
return 0;
}
for(ULL i = 2; i * i <= num; ++i)
{
if(num % i == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int b;
int N;
while(scanf("%d%d", &b, &N) == 2)
{
printf("%s\n", isPrime(b, N) ? "YES" : "NO");
}
return 0;
}
感谢阅读,欢迎评论!