I Older Brother
题意:给一个数,判断它是不是一个素数的几次方,如是,输出yes,否则,输出no。
思路:我一开始的思路是把这个数开各个次方,得到的数中只要有一个来出来的整数也是素数就OK了,但是不知道为什么一直WA在第11个样例。
后来换了思路,用质因子分解;
还有一种思路,
就是把1e5以内的素数都找出来,在看有没有一个素数的几次方为n。
Your older brother is an amateur mathematician with lots of experience. However, his memory
is very bad. He recently got interested in linear algebra over finite fields, but he does not
remember exactly which finite fields exist. For you, this is an easy question: a finite field of
order q exists if and only if q is a prime power, that is, q = p
k holds for some prime number
p and some integer k ≥ 1. Furthermore, in that case the field is unique (up to isomorphism).
The conversation with your brother went something like this:
A finite field of order q exists if and only if q is a prime power. (me)
(brother) Thanks! Just to be sure, what is a prime number?
A prime number is a number that has exactly two divisors. (me)
(brother) Right.
(brother) Remind me, what is a divisor?
Sigh. . . (me)
Never mind, I’ll write you a program. (me)
(brother) Awesome, thanks!
Input
The input consists of one integer q, satisfying 1 ≤ q ≤ 109
.
Output
Output “yes” if there exists a finite field of order q. Otherwise, output “no”.
Sample Input 1 Sample Output 1
1 no
Sample Input 2 Sample Output 2
37 yes
Sample Input 3 Sample Output 3
65536 yes
代码思路一:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 100005
int main()
{
ios::sync_with_stdio(0);
ll n;
cin >> n;
if(n == 1)
{
cout << "no" << endl;
return 0;
}
ll x = n;
int pos = 0;
for(int i = 2; i <= sqrt(n); i ++)
{
if(x%i == 0)
{
while(x%i == 0)
{
x/=i;
}
pos++;
}
if(x == 1) break;
}
if(x!=1) pos++;
if(pos == 1) cout <<"yes"<< endl;
else cout <<"no"<< endl;
return 0;
}
本文探讨了如何判断一个数是否为素数的幂,并解释了其与有限域存在的关系。通过质因子分解的方法,文章提供了一种有效的算法实现思路,帮助理解数学概念在计算机科学中的应用。
259

被折叠的 条评论
为什么被折叠?



