#include <stdio.h>
#include <stdbool.h>
int main(void)
{int a;
int n;
bool isprime;
printf("please enter the number of you want:");
scanf("%d",&a);
for (isprime=true;a>0;a--)
{
for(n=2;(n*n)<=a;n++){
if(a%n==0)
isprime=false;
}
if (isprime)
printf("%d is a prime\n ",a);
}
return 0;
}
我想输入一个整数 然后打印出小于等于它的素数 感觉我的是对的 但运行时就是有问题
小于2的不是素数,要特殊判断。还有isprime为false就可以直接break跳出循环,可以节省一点时间(不影响结果)。
isprime=true这句写在for括号里而不是循环体的话只会执行一次初始化。你的算法设计要求每次循环都初始化这个变量,那就必须把isprime=true放进大括号。
免费送你一段代码:
int a;
int n;
bool isprime;
printf("please enter the number of you want:");
scanf("%d", &a);
for (;a>1; a--)
{
isprime = true;
for (n = 2; n < a/2+1; n++)
{
if (a%n == 0)
{
isprime = false;
break;
}
}
if (isprime)
printf("%d is a prime\n ", a);
}