If prime(arr(i)) = True And arr(i) <= a Then a = arr(i)
改为
If prime(arr(i)) And (arr(i) <= a Or Not prime(a)) Then a = arr(i)
这样的话,当arr(1)是最小数且不是素数时它就不会成为最终结果了
但是还有一种特殊情况需要排除,就是当数组中的所有数字都不是素数时,arr(1)仍然会成为最终结果。解决办法是把
Label4Caption = a
改为
Label4Caption = IIf(prime(a), a, "没有素数")
#include <stdioh>
#include <mathh>
int main()
{
int i,j,k;
int flag = 1; //是否为素数标志 1-非素数,0-素数
printf("请输入一个正整数:\n");
scanf("%d",&i);
if(i<2)
k=2;
else
{
while(1) //无限循环,找大于i的下一个素数
{
/下面这个for循环判断大于i的下个正整数i+1的是不是素数/
for(j=2; j<=sqrt(i+1); j++)
{
if(((i+1)%j)==0)
{
flag = 0; //不是素数的话flag置0
break;
}
}
if(flag == 1) //大于i的下一个正整数i+1是素数,找到,跳出
{
k=i+1;
break;
}
else
{
flag = 1;
i++;
}
}
}
printf("大于m的最小素数是%d",k);
return 0;
}
条件分支覆盖不全,导致k有时未赋值就输出了,就为乱码了
小小修改如上
运行效果如下:
#include <stdioh>
#include <mathh>
int isPrime(int n)
{
int i;
for(i = 2; i <= (int)sqrt(n); i ++)
if(n%i == 0) return 0;
return 1;
}
int main()
{
int n, cnt=0;
for(n = 11; cnt<10; n++)
if(isPrime(n) && n%10==1)
{
printf("%d ", n);
cnt++;
}
return 0;
}
也可以简化成
#include <stdioh>#include <mathh>
int isPrime(int n)
{
int i;
for(i = 2; i <= (int)sqrt(n); i ++)
if(n%i == 0) return 0;
return 1;
}
int main()
{
int n, cnt=0;
for(n = 11; cnt<10; n+=10)
if(isPrime(n)==1)
{
printf("%d ", n);
cnt++;
}
return 0;
}
以上就是关于VB中最小素数的判断问题全部的内容,包括:VB中最小素数的判断问题、c语言中求大于a的最小素数 我编的程序输入一个数却出现了一个乱码,希望帮忙指出错误、C语言程序:输出个位是1的最小10个素数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)