C语言 关于素数 2 ~ 根号n

作者&投稿:长孙师 (若有异议请与网页底部的电邮联系)
在C语言中求素数时,为何只需要出从2 到 根号N 啊?~

这么想吧:一个数N,它是根号N的平方,那么如果它有其他约数的话,假设为A,B(约数肯定要成对出现的)必然有一个大于根号N,另一个小于根号N(显然如果都大于根号N,那相乘结果会大于N;反之会小于N),所以在找的时候,只需找到根号N即可,大于根号N的那些肯定跟小于N的成对匹配,如果小于根号N的约数都没有,显然也没有大于根号N的数与它匹配了

#include
using namespace std;
bool B(int &n) //一个函数判断是否为素数
{
int i;
float k = float(n);
float j = sqrt(k);
for(i=2;i <= j;++i)
{
if( n%i == 0 || n == 0 )
return false;
}
return true;
}

void main()
{
int N;
cout << "输入N的值:" ;
cin >> N;
cout << "2到N的素数为:" << endl;
for(int i = 2;i<N;i++)
{
if(B(i))
{
cout << i <<" ";
}
system("pause");
}

1.“实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除即可”给你举几个简单的例子,比如16和18,16的因数可以拆为2 8;4 4;8 2;18的因数可以拆为2 9;3 6;6 3;9 2。你看,这些都是成对出现的啊,所以只要到n/2就可以了。
2.“甚至只需被2到根号n之间的整数除即可”
这个也可以用上面16的例子来论证,在16开根号(即为4 4)以后出现的肯定是前面重复过了的因子了。所以结论成立

如果2-根下n没有n的因子则根下n到n肯定也没有它的因子
否则 根下n到n也有因子 所以只需要判断2到根下n有没有因子就行了
明白?

bu不好说啊,你想想:因数是成对的,5*4=20;2*10=20;你讨论了2,就不必讨论10了吧!


博山区17831624761: C语言 关于素数 2 ~ 根号n -
邹秀珍珠: 1.“实际上,n不必被2到(n-1)的整数除,只需被2到n/2间整数除即可”给你举几个简单的例子,比如16和18,16的因数可以拆为2 8;4 4;8 2;18的因数可以拆为2 9;3 6;6 3;9 2.你看,这些都是成对出现的啊,所以只要到n/2就可以了. 2.“甚至只需被2到根号n之间的整数除即可” 这个也可以用上面16的例子来论证,在16开根号(即为4 4)以后出现的肯定是前面重复过了的因子了.所以结论成立

博山区17831624761: C语言求2到N素数的问题 -
邹秀珍珠: #include <iostream> using namespace std; bool B(int &n) //一个函数判断是否为素数 {int i;float k = float(n);float j = sqrt(k);for(i=2;i <= j;++i){if( n%i == 0 || n == 0 )return false;}return true; }void main() { int N; cout << "输入N的值:" ; cin ...

博山区17831624761: 在C语言中求素数时,为何只需要出从2 到 根号N 啊? -
邹秀珍珠: 这么想吧:一个数N,它是根号N的平方,那么如果它有其他约数的话,假设为A,B(约数肯定要成对出现的)必然有一个大于根号N,另一个小于根号N(显然如果都大于根号N,那相乘结果会大于N;反之会小于N),所以在找的时候,只需找到根号N即可,大于根号N的那些肯定跟小于N的成对匹配,如果小于根号N的约数都没有,显然也没有大于根号N的数与它匹配了

博山区17831624761: c语言,写一个函数,判断该数是不是素数并且输出该素数(函数返回值是素数,不是0或1)? -
邹秀珍珠: 判断素数最直观的思路是,从2开始到n-1找有没有能被n整除的,没有的话n就是素数,根据数学知识,如果2到根号n范围内没有数能被n整除,n就是素数.#include<stdio.h> int prime(int n) { int i; for(i=2;i*i<=n;i++) { if(n%i==0) //如果n能整除i,n就...

博山区17831624761: c语言 输入一个大于3的整数n,判定它是否为素数.为什么只需使n被2~根号n之间的整数除即可判定 -
邹秀珍珠: 设有非素数n,那么 n = a * b (a,b为大于等于2的整数) 必然有解,否则为素数,这没错吧.如果 n = a * b,而且a > 根号n,由n = 根号n * 根号n可知,b必然小于根号n,反之亦然.也就是说,对于任何符合n = a* b的一组解,a 与 b 必然有一个是小于根号n的.

博山区17831624761: c语言求素数的算法 -
邹秀珍珠: 根据素数的性质,代码设计如下: 设计一:判断n是否能被1~n-1整除,不能整除为素数 #include<stdio.h> int main() { int i, n; scanf("%d", &n); for (i = 2; i < n ; i++) { if (n%i == 0) break; } if (i < n) printf("This is not a prime."); else printf("This is...

博山区17831624761: c语言判断素数共有几种方法 -
邹秀珍珠: 判断素数的方法只有一种:检查从2到n之间有没有n的因数,如果没有,就是素数,如果有,就不是! 但是,检查方法有多种,都是利用数的性质: 最基本的,从2检查到n 折半法,从2检查到n/2+1 开方法,从2检查到 根号n x*y = n 则,其中必有一个小于根号n 数组法,从数组中依次去除2,3,5,....的倍数

博山区17831624761: C语言编程(关于素数)
邹秀珍珠: #include<stdio.h> void main() { int prime(int); int i,m,n=1; for(i=2;i<=100;i++) { m=prime(i); if(m==1) { printf("%d ",i);n++; if(n==6) printf("\n"); } } int prime(int n) { int flag=1,i; for(i=2;i<=n/2 && flag==1;i++) if(n%i==0) flag=0; return(flag); }上面打漏了两个},这样 if(n==6) printf("\n"); } } }

博山区17831624761: C程序素数问题
邹秀珍珠: 素数的定义就是只能被1和本身整除的数,所以从2开始; 对于一个数N如果有一个因子大于根号N,必然还会有一个因子小于根号N存在,所以,只要在小于根号N范围内不存在因子,大于根号N部分一定没有了. 而且,为了更快的达成结果,可以把N被2开始(包括2)到根号N的奇数除即可.

博山区17831624761: C语言 (求一百以内的素数) 问题分析!! -
邹秀珍珠: 素数是除1和它本身没有其他的因子 分析:先是for 语句中n从2到100,这表示从1-100内的范围.第二个for 语句是i从2到n-1分别试商(n%i是表示取n除i的余数值为0 表示能够整除) 当能够整除是这个数就不是素数用break语句跳出本层循环(for (i=2;i

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网