描述
判断一个数字a是否是m-伪素数。 m-伪素数的定义如下:如果一个大于1的整数a,除了1和自身外,能够整除的数字不多于m个,则称数字a是一个m-伪素数。 例如10是一个2-伪素数,因为10除了1和10以外,能够整除的数字有2和5,不多于2个。当然10也可以称为3-伪素数。
输入 第1行是一个正整数n,表示测试案例的数量。 从第2行到第n+1行,每行是一组测试案例,有两个整数a和m(其中a>1,m>=0)
输出 针对每组案例,如果a是m-伪素数,则输出yes,否则输出no。每组案例输出完都要换行。
样例输入 复制样例 2
12 2
12 4
样例输出 no
yes
HINT
解:
正常循环会超时,但:
例如12 算2的时候可以同时可以算上6,算3的时候算上4
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int a,b,m=0;
cin>>a>>b;
int sq=sqrt(a);
for(int j=2;j<=sq;j++)
{
if(a%j==0)
{
if(j!=sqrt(a))
{
m+=2;
}
else m++;
}
}
//cout<<m<<endl;
if(m<=b) cout<<"yes"<<endl;
else cout<<"no"<<endl;
}
return 0;
}