一个整数n=p2q,其中p,q为素数,且p≠q。比如, 12=22⋅3,那么12是符合条件的数; 18=2⋅32,所以18也是符合条件的数; 30=2⋅3⋅5,所以30是不符合条件的数。 求区间[a,b]之间有多少个符合条件的数 第一行是一个整数T (1≤T≤10000),表示样例的个数。 每行一个样例,为两个整数a,b, (1≤a≤b≤106。依次每行输出一个样例结果,为一个整数。用c语言写一个实现此问题的程序
时间: 2023-03-13 18:05:41 浏览: 122
本例是一个求素数的c语言代码
答:这个问题可以通过遍历[a,b]之间的数,然后判断每个数是否符合条件来实现,用c语言可以写出如下程序: // 判断数字n是否符合条件
bool check(int n)
{
int p, q;
// 对n开方后取整,若n是完全平方数,则返回false
int sqrt_n = (int)sqrt(n);
if (sqrt_n * sqrt_n == n)
return false;
// 对n开方后取整,若p和q均为素数,且p≠q,则返回true
p = sqrt_n;
q = n / sqrt_n;
if ( isPrime(p) && isPrime(q) && p != q)
return true;
return false;
} // 判断[a,b]之间有多少符合条件的数
int solve(int a, int b)
{
int cnt = 0;
for (int i = a; i <= b; i++)
if (check(i))
cnt++;
return cnt;
}
阅读全文