c - 打印 N 个以空格分隔的整数,表示所有素数后跟非素数
问题描述
#include <stdio.h>
int main()
{
int a[100],m,n,i,j,flag,b[100];
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<n;i++)
{
m=a[i];
flag=0;
for(j=0;j<=m;j++)
{
if(m%j==0){
flag=flag+1;
}
}
if(flag==2){
b[i]=m;
printf("%d",b[i]);
}
}
}
我正在尝试采用 n 数组输入并仅打印素数。但是我为上面的代码得到的输出是:
OUTPUT:
5
7 4 2 6 5
Floating-point exception(core dumped)
我希望输出是 7 2 5 4 6 素数,后跟一个非素数。
解决方案
素数从 2 开始,但如果您的输入有 0 和 1,则在检查时也要考虑这些。有更好的方法可以找到素数,为简单起见,我使用与 OP 相同的方法。
#include <stdio.h>
#define MAX_SIZE 100
int main()
{
//int a[MAX_SIZE],m,n,i,j,flag,b[MAX_SIZE];
// use better names for readability
int Numbers[MAX_SIZE]; // stores all the numbers
int m,n,i,j,flag;
printf("\nEnter the number for PRIME range:");
if(1 != scanf("%d",&n))
printf(" read failed \n");
printf("enter %d numbers\n", n);
for(i = 0; i < n; i++)
{
if(1 != scanf("%d",&Numbers[i]))
printf("read error in loop\n");
}
printf("PRIMES\n");
for(i = 0; i < n; i++)
{
m = Numbers[i];
flag = 0;
if(m == 0 || m == 1)
continue;
// there are better ways to find prime , but using same as OP for simplicity
for(j = 1;j <= m; j++)
{
if( m % j == 0)
{
flag = flag + 1;
}
}
// 1 and itself , so prime
if(flag == 2)
{
printf("%d ", m);
}
}
return 0;
}
推荐阅读
- dart - 如何在颤动的小部件中创建内部循环?
- algorithm - 比较 lg(lg* n) 和 2^(lg*n ) 的渐近符号 big-Oh, small-Oh Ω, ω, Ɵ
- github - Github 分页是如何工作的
- php - 致命错误:无法重新声明类 XXX
- java - Unity中AndroidJavaObject和AndroidJavaClass有什么区别
- r - 查找变量的位置
- mysql - 如何在kafka jdbc连接源中过滤数据库中的表
- java - 在 Java / Kotlin / Android 中,如何在线性渐变的某个点获得颜色?
- c - 用 C 编写一个 lua_Reader 函数
- c# - 在同一类 c# 中的构造函数中调用构造函数并在同一构造函数中调用基构造函数