|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
int main()
{
int a,i,flag;
scanf("%d",&a);
for(i=2;i<a;i++)
{
if(a%i==0)
{
flag=1;
break;
}
}
if(flag==1)
{
printf("%d不是素数",a);
}
else
{
printf("%d是素数",a);
}
return 0;
}
我这边运行你的代码是 OK 的。。
代码本身的逻辑没有问题,但是范围没有做好控制,0,1,这两个数既不是质数,也不是和数,所以需要判断出来,另外,这样判断的话,效率比较低,算法效率是 O(n^2),用埃拉托色尼算法,可以降低复杂度,下面是代码:
- #include <stdio.h>
- #include <stdlib.h>
- int main()
- {
- int i, j;
- int a[101];
- int b[4] = {2, 3, 5, 7};
- for (i = 1; i < 101; i++)
- {
- a[i] = 1;
- }
- a[1] = 0;
- for (i = 1; i < 101; i++)
- {
- for (j = 0; j < 4; j++)
- {
- if (i != b[j] && i % b[j] == 0)
- {
- a[i] = 0;
- }
- }
- }
- for (i = 1; i < 101; i++)
- {
- if (a[i] == 1)
- {
- printf("%d\t", i);
- }
- }
- return 0;
- }
复制代码
大体思路就是:
1、确立范围,然后把范围先平方根一把(代码里没有体现出来,但是范围是 100);
2、将2到平方根之间的质数先找到(所以数组b里是 2,3,5,7);
3、将这些质数在步骤1的范围的倍数都找到,然后做标记排除掉;
4、最后将未标记的数输出,得到的就都是质数了;
算法复杂度约为O(n*√n),在此基础上再试试看
|
|