判断素数

今天被一道大一的素数题给绊了一晚上,我这个心啊,又自卑了

题目是删除数组里的素数,然后输出

看着发过来的程序,我就理解困难了

#include<stdio.h>
int delarr(int a[], int n)
{
	int j,k,p,q= 0;
	for (k = 0;k <n;k++)//读入十个数字
	{
		for (j = a[k] / 2;j >= 2;j--)
			if (a[k] % j != 0) {//判断是否为素数的循环和条件
				for (p = k;p < n;p++)
					a[k] = a[k + 1];
				a[k] = NULL;
				q++;//素数个数啊
			}
	}printf("最终结果为:\n");
	for (k = 0;k < n-q;k++)//n-q意味着目前数组的个数啊,我就日了
		printf("%d", a[k]);
	return n - q;
}
void main()
{
	int i, d[10];
	printf("input ten numbers:\n");
	for (i = 0;i < 10;i++)
		scanf("%d", &(d[i]));
	delarr(d, 10);
}
找了半天我才找到俩错误:

if (a[k] % j != 0)
如果是==,那肯定就不是素数,但是改成!=,那就不能判断了
因为在判断过程中这个条件不只是素数可以满足,
比如 8%3,不是素数,但是条件成立了

另外就是
a[k]=a[k+1],改成a[p]=a[p+1](这儿只能说是粗心了,不是程序问题)

经过一番艰难修改,成了这样:
#include<stdio.h>

bool IsPrime(int n) {
	int i;
	if (n < 2)
		return false;
	else
	{
		for (i = 2; i <= n / 2.0; i++)
			if (n%i == 0)
			{
				return false;
			}
		return true;
	}
}

void delarr(int a[], int n)
{
	int  j,k, q = 0;
	for (k = 0; k <n; k++)//读入十个数字
		if (IsPrime(a[k])) {
			for (j = k; j < n-1; j++)
				a[j] = a[j + 1];
			a[j+1] = NULL;
			n--;
			q++;
			k--;      //这条语句是因为把之前的一个元素删掉了,需要再从这儿开始,注意注意
		}
	printf("素数:%d", q);
	printf("最终结果为:\n");
	for (k = 0; k < n ; k++)//n-q意味着目前数组的个数啊,我就日了
		printf("%d ", a[k]);
}

void main()
{
	int i, d[20];
	printf("input ten numbers:\n");
	for (i = 0; i < 10; i++)
		scanf("%d", &(d[i]));
	delarr(d, 10);
}

注意k--那儿,一定要加上,原因在上边
另外数组设大一点吧,不然容易数组越界。。





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值