判断素数
2015-12-15 23:11
288 查看
今天被一道大一的素数题给绊了一晚上,我这个心啊,又自卑了
题目是删除数组里的素数,然后输出
看着发过来的程序,我就理解困难了
#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](这儿只能说是粗心了,不是程序问题)
经过一番艰难修改,成了这样:
注意k--那儿,一定要加上,原因在上边
另外数组设大一点吧,不然容易数组越界。。
题目是删除数组里的素数,然后输出
看着发过来的程序,我就理解困难了
#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--那儿,一定要加上,原因在上边
另外数组设大一点吧,不然容易数组越界。。
相关文章推荐
- Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
- Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
- Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
- Dynamics CRM2015 on-premises直接升级Dynamics CRM2016 on-premises
- ubuntu开关防火墙
- Android
- python version 2.7 required,which was not found in the registry
- mongodb 相关的查找,插入删除等操作
- 1049. 数列的片段和(20)
- java泛型程序设计
- Popwindow学习笔记
- Calendar
- ava中普通代码块,构造代码块,静态代码块区别及示例
- NServiceBus开发
- ios--进程/多线程/同步任务/异步任务/串行队列/并行队列(对比分析)
- 画圆
- 第二百五十七天 how can I 坚持
- D3D11与D3D9全屏/窗口化切换差异
- HDOJ--2018
- linux suspend的基本流程,最简单的流程分析