本文目录一览:
- 1、C语言 求出 2 到 m 之间 ( 含 m,m
- 2、用C语言把2-100之内的素数放到数组里,并且输出来。
- 3、C语言:找出100以内的所有素数,存放在一维数组中,并将所找到的素数按每行10个数的形式输出。
- 4、c语言 编写一个函数 搜索出一组数中的素数 并将它保存到另一个数组中
- 5、C语言求素数数组
- 6、C语言编程,从3开始,求出最小的10个素数,并保存到数组中
C语言 求出 2 到 m 之间 ( 含 m,m
#include stdio.h
#include stdlib.h
int main()
{
int m,i,j,k=0,flag=1;
scanf("%d",m);
int a[1000];
for(i=2; i=m; i++) //其实2不需要特殊处理的,就从2开始
{
flag = 1;//每轮的flag都需要重新赋值的
for(j=2; j*j=i; j++)
{
if(i%j==0)
{
flag=0;//非质数,直接退出
break;
}
}
if(flag)
{
//输出质数
a[k]=i;
printf("%4d",a[k]);
k=k+1;
}
}
printf("\n%d\n",k);
return 0;
}
printf(" 2");
就不要放到循环里了,否则会循环输出的,不符合你的最终要求!
用C语言把2-100之内的素数放到数组里,并且输出来。
#include stdio.h
#include stdlib.h
#include math.h
#define n 100
int main()
{
int a[n+1]={0};
int i,j;
for(i=2;i=sqrt(n);i++){
if(a[i]==0){
for(j=2*i;j=n;j+=i){
a[j]=1;
}
}
}
for(i=2;i=n;i++){
if(a[i]==0)
printf("%d ",i);
}
return 0;
}
输出100以内的素数,思路:
假如自然数N不是素数,则除1和其本身之外,必然至少存在两个数A和B,使得A*B=N,则A和B中必有一个大于或者等于sqrt(N),另一个小于或者等于sqrt(N)。下面是粗略证明如果N是合数,则必有一个小于或者等于根号N的素因子.因为任何合数都可表示为两个或者更多个素数之积。
假如N是合数且其素因子都大于根号N,那么将产生矛盾:根号N*根号NN。所以合数必有(至少)一个不大于根号N的素因子。
n的不大于根号的因子=sqrt(n);n-1的不大于根号的因子=sqrt(n-1),显然sqrt(n-1)sqrt(n);所以2~n内的自然数的因子范围是2~sqrt(n);换句话说2~sqrt(n)的倍数覆盖了了2~n范围内的合数。
扩展资料:
数组使用规则:
1.可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。例如:static int a[10]={0,1,2,3,4};表示只给a[0]~a[4]5个元素赋值,而后5个元素自动赋0值。
2.只能给元素逐个赋值,不能给数组整体赋值。例如给十个元素全部赋1值,只能写为:static int a[10]={1,1,1,1,1,1,1,1,1,1};而不能写为:static int a[10]=1;请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。
3.如不给可初始化的数组赋初值,则全部元素均为0值。
4.如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。例如:static int a[5]={1,2,3,4,5};可写为:static int a[]={1,2,3,4,5};动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
参考资料:
百度百科-数组
C语言:找出100以内的所有素数,存放在一维数组中,并将所找到的素数按每行10个数的形式输出。
素数,于是100以内的素数应该少于50个,我们就以a[50]来存放这些素数吧.还有1不是素数。
main()
{
int a[50];
int i=5,j=3,m=1;
a[0]=2;a[1]=3;
for(i=5;i100;i=i+2)
loop1: for(j=3;ji;j++)
loop2:
if(i%j==0)
else
{if(j==i-1)
a[++m]=i;
else
}
/*来验证一下是否正确*/
printf("%d\n",m);/*看看有多少个素数*/
for(i=0;i=m;i++)
printf("%d\t",a[i]);
}
c语言 编写一个函数 搜索出一组数中的素数 并将它保存到另一个数组中
//这个给你参考
#includestdio.h
#includestdlib.h
#includemath.h
#includeassert.h
#includememory.h
bool is_prime(unsigned int n)
{
if(n2)
{
return false;
}
unsigned int ncnt=(unsigned int)sqrt(n*1.0);
for(unsigned int i=2;i=ncnt;i++)
{
if(n%i==0)
return false;
}
return true;}
unsigned int search_prime(int* src,int* res,int n)
{
// assert(src!=NULLres!=NULL); //
memset(res,0,sizeof(int)*n);
unsigned int ncnt=0;
for(int i=0;in;i++)
{
if(is_prime(*src))
{
*res++=*src;
++ncnt;
}
src++;
}
return ncnt;
}
int main()
{
int test[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int res[20]={0};
int ncnt=search_prime(test,res,20);
printf("%d\n",ncnt);
for(int i=0;incnt;i++)
{
printf("%d ",res[i]);
}
printf("\n");
return 0;}
C语言求素数数组
#include stdlib.h
#include stdio.h
void readwriteDat();
void num(int m, int k, int *xx)
{
int n=0,i,b;
while(m++)/*死循环*/
{
for(i=2;im;i++)
{
if(!(m%i))
{b=0;break;}
else b=1;
}
if(b) xx[n++]=m;/*if(n==k-1) break;
}
}
int main()
{
int m, n, xx[1000];
printf("\nPlease enter two integers:");
scanf("%d%d", m, n);
num(m, n, xx);
for (m=0; mn; m++)
printf("%d ", xx[m]);
printf("\n");
readwriteDat();
system("pause");
return 0;
}
void readwriteDat()
{
int m, n, xx[1000], i;
FILE *rf, *wf;
rf = fopen("in.dat", "r");
wf = fopen("out.dat", "w");
for (i=0; i10; i++)
{
fscanf(rf, "%d %d", m, n);
num(m, n, xx);
for (m=0; mn; m++)
fprintf(wf, "%d ", xx[m]);
fprintf(wf, "\n");
}
fclose(rf);
fclose(wf);
}
求一个大于m且仅靠m的k个素数存入数组xx传回,不知哪里出错,除了num函数,其他都是题目给的
C语言编程,从3开始,求出最小的10个素数,并保存到数组中
代码如下:
#includestdio.h
int main() {
int num[10] = { 2 }, idx = 1;
for (int i = 3; idx != 10; i++) {
int flag = 1;
for (int j = 0; j*j = i j idx; j++) {
if (i%num[j] == 0) {
flag = 0;
break;
}
}
if (flag) num[idx++] = i;
}
for (int i = 0; i 10; i++)
printf("%d ", num[i]);
printf("\n");
}