赞
踩
根据题意,如果一个数N只有三个约数,那么它的约数一定分别是,1,N,sqrt(N)。也就是只有N / sqrt(N) 与 sqrt(N)相等的时候,他的约数才能是3个,否则就是4个了。
一开始直接写了个sqrt的素数判断,直接TLE了,随后换了个筛法过了……
- #include <stdio.h>
- #include <string.h>
- #include <math.h>
- #define MAXX 1000000
- int a[MAXX+1];
- void isPrime()
- {
- a[0] = a[1] = 1;
- memset(a, 0, sizeof(a));
- for(int i = 2; i <= MAXX; i++)
- {
- if(!a[i])
- {
- for(int j = i + i; j <= MAXX; j += i)
- {
- a[j] = 1;
- }
- }
- }
- }
- int main()
- {
- int n;
- long long ans;
- isPrime();
- scanf("%d", &n);
- while(n--)
- {
- scanf("%I64d", &ans);
- long long temp = sqrt(ans) + 0.5;
- if(ans > 1 && temp * temp == ans && a[temp] == 0)
- {
- printf("YES\n");
- }
- else
- {
- printf("NO\n");
- }
- }
- return 0;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。