C语言程序问题
# include <stdio.h>
int main(void)
{
int N;
if(N<2)
{
printf("N不是素数 \n");
}
else if(N=2)
{
printf("N是素数 \n");
}
else if(N>2,N%2!=0,N%3!=0)
{
printf("N是素数");
}
return 0;
}
帮我看看 它能不能求 任意N>1,判断N是否为素数。
追问:这个我改好了,呵呵,不小心忘了输入,但是只能输入一次就退出来了,加段什么程序可以 连续判断的呢?
答案:#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
int i,x;
bool prime;
printf("请输入一个整数: ");
scanf("%d",&x);
printf("\n");
if(x==1||x<=0)
printf("%d不是素数!\n\n",x);
else if(x==2)
printf("%d是素数! \n\n",x);
else{
for(i=2;i<x;i++)
{
if(x%i==0)
prime=false;
}
if(prime==false)
printf("%d不是素数!\n\n\n",x);
else
printf("%d是素数!\n\n\n",x);
} //end for else{
getchar();
return 1;
}
素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积。例如,15=3*5,所以15不是素数;又如,12=6*2=4*3,所以12也不是素数。另一方面,13除了等于13*1以外,不能表示为其它任何两个整数的乘积,所以13是一个素数。
有的数,如果单凭印象去捉摸,是无法确定它到底是不是素数的。有些数则可以马上说出它不是素数。一个数,不管它有多大,只要它的个位数是2、4、5、6、8或0,就不可能是素数。此外,一个数的各位数字之和要是可以被3整除的话,它也不可能是素数。但如果它的个位数是1、3、7或9,而且它的各位数字之和不能被3整除,那么,它就可能是素数(但也可能不是素数)。没有任何现成的公式可以告诉你一个数到底是不是素数。你只能试试看能不能将这个数表示为两个比它小的数的乘积。
找素数的一种方法是从2开始用“是则留下,不是则去掉”的方法把所有的数列出来(一直列到你不想再往下列为止,比方说,一直列到10,000)。
第一个数是2,它是一个素数,所以应当把它留下来,然后继续往下数,每隔一个数删去一个数,这样就能把所有能被2整除、因而不是素数的数都去掉。在留
下的最小的数当中,排在2后面的是3,这是第二个素数,因此应该把它留下,然后从它开始往后数,每隔两个数删去一个,这样就能把所有能被3整除的数全
都去掉。下一个未去掉的数是5,然后往后每隔4个数删去一个,以除去所有能被5整除的数。再下一个数是7,往后每隔6个数删去一个;再下一个数是11
,往后每隔10个数删一个;再下一个是13,往后每隔12个数删一个。……就这样依法做下去。
你也许会认为,照这样删下去,随着删去的数越来越多,最后将会出现这样的情况;某一个数后面的数会统统被删去崮此在某一个最大的素数后面,再也不
会有素数了。但是实际上,这样的情况是不会出现的。不管你取的数是多大,百万也好,万万也好,总还会有没有被删去的、比它大的素数。
事实上,早在公元前300年,希腊数学家欧几里得就已证明过,不论你取的数是多大,肯定还会有比它大的素数,假设你取出前6个素数,并把它们乘在
一起:2*3*5*7*11*13=30030,然后再加上1,得30031。这个数不能被2、3、5、7、11、13整除,因为除的结果,每次都会余1。如果30031除了自己以外不能被任何数整除,它就是素数。如果能被其它数整除,那么30031所分解成的几个数,一定都大于13。事实上,3
0031=59*509。
对于前一百个、前一亿个或前任意多个素数,都可以这样做。如果算出了它们的乘积后再加上1,那么,所得的数或者是一个素数,或者是比所列出的素数还要大的几个素数的乘积。不论所取的数有多大,总有比它大的素数,因此,素数的数目是无限的。
随着数的增大,我们会一次又一次地遇到两个都是素数的相邻奇数对,如5,7;11,13;17,19;29,31;41,43;等等。就数学家所能及的数来说,它们总是能找到这样的素数对。这样的素数对到底是不是有无限
个呢?谁也不知道。数学家认为是无限的,但他们从来没能证明它。这就是数学家为什么对素数感兴趣的原因。素数为数学家提供了一些看起来很容易、但事实
却非常难以解决的问题,他们目前还没能对付这个挑战哩。
这个问题到底有什么用处呢?它除了似乎可以增添一些趣味以外,什么用处也没有。这个程序不行,首先你就没有给 N赋值,少了scanf("%d",&N); 没输入怎么判断.
其次是下面几个判断语句,if(N>2,N%2!=0,N%3!=0) 我想你可能是if(N>2&&N%2!=0&&N%3!=0) &&表示且,
这样才能表示N大于2不能被2和3整除,
不过即使这样修改后,这个程序还是错了..
改成这样
#include <stdio.h>
int main()
{
int N;
scanf("%d",&N);
if(N<2)
{
printf("N不是素数 \n");
}
else if(N=2)
{
printf("N是素数 \n");
}
else if(N>2,N%2!=0,N%3!=0)
{
printf("N是素数");
}
return 0;
}
我感觉你易做图真是个猪,素数的判断条件都没有怎么知道是否素数呢?
小弟佩服呀 难道不能被2和3整除就是素数了?而且你那else if里的表达式有这样写的吗?
再而且你的程序真的能编译通过吗?
求素数N
从2开始~N,这是第一重循环,第二重循环是从2开始~根号n,如果其中有被整除的,那它就不是素数
#include <stdio.h>
void main()
{
int N,j,half;
printf("请输入一个数N:\n");
scanf("%d",&N);
half=N/2;
for(j=2;j<half;j++)
if(N%j==0) printf("%d不是素数\n",N);
if(j>=half) printf("%d是素数\n",N)
}
判断一个数是不是素数,只要除以2到这个数的一半,如果都除不尽,就是素数
判断一个数是否是素数,算法,让m被2 到根号m除 ,如果m能被2到根号m之中的任意一个整数整除,那么这个数就不是素数,
#include "math.h" // 因为用的开方所以需要调用数学函数库
#include "stdio.h"
mian()
{
int m,i,k;
scanf("%d\n",&m);
k=sqrt(m);
for(i=2;i<=k;i++)
{
if(m%i==0) break;
}
if (i>=k+1) printf("%d 是一个素数\n",m);
}
#include "stdio.h"
#include "stdlib.h"
int main()
{
int N;
printf("please input a number :\n");
scanf("%d",&N);
if(N<2)
printf("N不是素数 \n");
else if(N==2||N==3)
printf("N是素数 \n");
else if(N%2==0||N%3==0)
printf("N不是素数\n");
else
printf("N是素数\n");
system("pause >nul");
}
希望楼主学的开心,C还是不难学的,多试试程序就OK 了···
顺利攻破C语言哈···
上一个:c语言课程设计
下一个:请教C语言问题