Problem I: 约素
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 1808 Solved: 468
Description
判断一个正整数n的约数个数是否为p,其中p是素数。
Input
第一行给测试总数T(T <= 10000)。
接下来有T行,每行有两个数字n(1 <= n <= 1000000000)和p(2 < p <= 1000000000)。
Output
每组测试数据输出一行,如果n的约数个数是p,输出“YES”,否则输出“NO”。
Sample Input
5
64 7
911 233
1080 13
1024 11
20170211 1913
Sample Output
YES
NO
NO
YES
NO
HINT
思路在代码注释里面
完整代码如下:
#include<stdio.h>
#include<string.h>
#include<math.h>
int main(void)
{
int t,n,p;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&p);
int count = 0;//记录约数的个数
/*主要思路就是暴力,求一个数全部的约数个数
不过这里只要判断的sqrt(n)就可以了,例如64/2 = 32
这里就可以知道2和32 都是他的约数,所以计数+2
不过有一个特殊值就是sqrt(n)这里单独判断。*/
double a = sqrt(n);
int b = sqrt(n);
if(a == b)
count = 1;
for(int i=2;i<sqrt(n);i++)
{
if(n % i == 0)
count +=2;//这里计数加两次
}
count += 2;
if(count == p)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}