题目描述
小H有n粒鲜花的种子,他的目标是种出一片花海。这个花海的形状是矩形的。小H想让花海的行数和列数都是素数,他不知道手里的种子能有几种可行的方案(只有当两个方案的行数相同,列数也相同时,才视为同一个方案),你能帮帮他吗?注意,小H可以不用完所有种子, 也就是只要行数和列数都是素数,且乘积小于等于n即为可行的方案。
输入
一个整数n,代表鲜花种子数量(0<n<=10000)
输出
一个整数,代表满足小H要求的方案数量。
样例输入 Copy
7
样例输出 Copy
3
# include<stdio.h>
# include<math.h>
# pragma warning(disable : 4996)
int sushu(int i);
int main(void)
{
int n, con = 0, i, j;
scanf("%d", &n);
for (i =2 ; i <= n; i++)
{
for (j = 2; j <= n; j++)
{
if (i * j <= n && sushu(i) == 1 && sushu(j) == 1)
con++;
}
}
printf("%d\n", con);
}
int sushu(int i)
{
int q,a;
q = (int)sqrt(i);
for (a = 2; a <= q; a++)
{
if (i % a == 0)
break;
}
if (a <= q)//如果没有限制i的取值范围大于2;要将此句改写成if(a<=q||i==1)
return 0;
else
return 1;
}