输入10为啥输出的是0啊,我真崩溃了,不应该是1嘛,搞个素数都快哭了。
if那里z=0改为z==0 ,然后goto可以去掉,再增加对小于2的数的判断,最后如果标志b为1代表素数的话,其初始值改为1应该就可以了。
修改如下:
参考链接:
#include <stdio.h>
// https://baike.baidu.com/item/%E8%B4%A8%E6%95%B0/263515
int susu(int begin){
int a,b,z;
b=1; // 素数标志,默认begin=1,即是素数
if(begin<2){ // 小于2的数不是素数,返回0
return 0;
}
// 遍历2到begin-1 之间的所有数,如果区间内任意一个数可以整除begin,则begin不是素数,返回0
// 2是特例,不进入循环,但它是素数,返回b的默认值1
for(a=begin-1;a>1;a--){
z=begin%a;
//printf("z=%d,begin=%d,a=%d\n",z,begin,a);
if(z==0){ // 如果a可以整除begin,则素数标志b置0,表示begin不是素数,返回b的值
b=0;
return b;
}
}
return b; // 如果区间内任意一个数不能整除begin,则begin是素数,返回1
}
int main(void){
int a,z;
scanf("%d",&z);
a=susu(z);
printf("%d",a);
return 0;
}
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。
写三个函数,1) 输入10个数,2)进行处理,3)输出10个数
我可以回答关于如何在C语言中求素数的问题。
求素数可以采用“筛法”,即在一个数组中将素数的倍数都标记为非素数,最终剩下的就是素数。下面是一个示例代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n;
printf("请输入一个正整数:");
scanf("%d", &n);
if (n <= 1) {
printf("输入错误,只能输入大于1的正整数!");
return 0;
}
char *isPrime = (char *)malloc(sizeof(char) * (n+1)); // 动态分配内存
for (int i = 0; i <= n; i++) {
isPrime[i] = 1; // 先假设所有数字都是素数
}
for (int i = 2; i <= n; i++) {
if (isPrime[i]) { // 如果i是素数
for (int j = i * 2; j <= n; j += i) { // 将i的倍数都标记为非素数
isPrime[j] = 0;
}
}
}
int count = 0;
for (int i = 2; i <= n; i++) {
if (isPrime[i]) {
count++; // 统计素数的个数
}
}
printf("1 ~ %d中共有%d个素数。\n", n , count);
free(isPrime); // 释放内存
return 0;
}
该代码使用了动态内存分配,先假设所有的数字都是素数(用1代表素数),然后从2开始遍历到n,如果找到了一个素数i,则将它的倍数都标记为非素数(用0代表非素数)。遍历完成后,再统计1~n中有多少个素数,最后释放内存。
关于你输入10但输出为0的问题,可能是你代码中的问题。可以提供你的代码让我帮你检查。