int sushu(int n) {int i; for(i=2;i<=n/2;i++) if(n%i==0) return 0; if(i>n/2) return 1; }

为什么程序中if(i>n/2) return 1;可以表示它是素数呢?

第1个回答  推荐于2016-04-05
一般来说是i<=sqrt(n),才可以认为它是素数的。
k=sqrt(n); //判别i是否为素数,只需使2~根号n之间的每一个整数去除追问

。。。我问的是这个语句中为什么它可以表示素数,谢谢。

追答

因为你的程序中
for(i=2;i=q>=根a
则 a = pq >= p²
所以必有一个因数<= 根号a
至于你程序里的n/2毫无理论依据,个人认为这个说法是错误的。

本回答被提问者和网友采纳
第2个回答  2020-05-14
一般来说是i<=sqrt(n),才可以认为它是
素数
的。
k=sqrt(n);
//判别i是否为素数,只需使2~根号n之间的每一个整数去除

定义函数 int sushu(int n),判定素数,是就返回1,不是返回0?
回答:自定义函数程序如下: int sushu(int n){ int i,c=1; for(i=2;i<n\/2;i++) if(n%i==0){ c=0; break;} return c;} 有什么问题请留言。

考拉斯猜想(冰雹猜想)用c语言完成?
scanf("%d", &num);

http:\/\/zhidao.baidu.com\/question\/368812866.html?oldq=1
int sushu(int n){ int i;if(n<2)return 0;if(n&1)\/\/n wei jishu for(i=2;i<=sqrt((double)n);i+=2)if(n%i==0)return 0;else return 1;else\/\/n wei ou shu return 0;} void main(){ int x,y,n,flag[100],i=0;while(scanf("%d%d",&x,&y)&&x!=0||y!=0){ ...

编个程序:输出100-999之间的全部素数 谢谢
int is_su(int n)\/* 素数判断*\/{ int i;if(n<2) return 0;for(i=2;i<=n\/2;i++){ if(n%i==0){ return 0;} } return 1;} int sushu(int n,int *a)\/* 素数的求解及保存 *\/ { int cnt=0,i=0,k=0;while(i<n){ if(is_su(k)){ a[cnt++]=k;i++;} k++;...

C语言:输出1000~2000之间的所有素数,每行输出8个,要求调用求素数函数...
include <stdio.h> int sushu(int n){ int i;for(i=2;i<n;i++){ if(n%i==0)return 0;} return 1;} int main (){ int n,m,j=0;for(n=1000;n<=2000;n++){ m=sushu(n);if(m==1){ printf("%d ",n);j++;if(j%8==0)printf("\\n");} } return 0;} ...

c语言判断完全数
include<stdio.h>int IsPerfect(int n){int i,s=1; for(i=2;i<=n\/2;i++) if(n%i==0)s+=i; return s==n; }int main(){int n; scanf("%d",&n); printf("%d is %sa perfect number\\n",n,IsPerfect(n)?"":"not "); return 0;} ...

试设计程序 验证任意一个不小于6的偶数可表示为两个素数之和
int sushu(int n) \/*这个主要是用来判断是不是素数*\/ { int i;if(n<=2) \/*如果小于等于2则不是素数*\/ return 0;for(i=2;i<=sqrt(n);i++){ if(n%i==0)return 0;} return 1; \/* 1用来标志是素数,0标志不是素数*\/ } void main(){ int i,shu,jishu=0;do { printf("...

C语言中如何调用子程序
例:include<stdio.h> intsushu(intx){inti;for(i=2;i<x;i++)if(x%i==0)break;if(i==x)return1;elsereturn0;} main(){inti,n=0;for(i=2;i<=1000;i++)if(sushu(i)==1)n++:printf("n=%d",n);}

C语言 找出300以内的所有素数,每行输出6个
int isSuShu(int n){ int i; for(i=2;i<n;i++) if(n%i==0) return 0; return 1;}int main(){ int a,cnt=0; for(a=3;a<=300;a++) { if(isSuShu(a)) { cnt++; \/*记录找到的素数个数*\/ if(cnt%6==0) \/*6个数一行*\/ printf("%6d\\n",a); else printf("%6d ",a); }...

1000以内的完数
int sushu(int n){ int i;for (i=2;i<=sqrt(n*1.0);i++)if (n%i==0) return 0;return 1;} using namespace std;int main(){ int i,s,j;for (i=4;i<=1000;i++){ if (sushu(i)==0){ s=1;for (j=2;j<=i\/2;j++)if (i%j==0) s+=j;if (s==i) cout<...

相似回答