一、C语言,求前n个素数?
示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int i,j,n,l;
scanf("%d",&n);
for(i=2;i<n;i++)
{
l=1;
for(j=2;j<=sqrt((double)i);j++)
{
if(i%j==0)
{
l=0;break;
}
}
if(l==1)
{printf("%d\t",i);}
}
system("pause");
return 0;
}
二、c语言求n以内所有素数之和?
c语言求n以内所有素数之和的方法是利用循环for语句求和,具体操作如下: S0=0 for i=2 to n,if i如果是素数,Si=S(i-1)+i。
三、求素数的方法?
/*求素数的三种方法 一:for(i=2;i<=(n-1);i++) if(n%i==0)i在2到n-1之间任取一个数,如果n能被整除则不是素数,否则就是素数 二:for(i=2;i<n/2;i++) if(n%i==0) /*i在2到n/2之间任取一个数,如果n能被整除则不是素数,否则就是素数 三:for(i=2;i<(n=sqrt(n));i++) if(n%i==0) /*i在2到sqrt(n)之间任取一个数,如果n能被整除则不是素数,否则就是素数,在下省了下面的输出步骤*/ /*在本程序中使用第三种方法来求解*/ #include <stdio.h> #include <math.h> int main(void) { int i; /*外循环*/ int j; /*内循环*/ int flag; /*素数标志,flag为1则此数为素数*/ flag = 0; //int n; i = 2; while( i <= 100) { j = 2; flag = 1; /*假设此数为素数*/ while(j <= (int) sqrt(float(i))) { if(0 == (i %j)) flag = 0; /*根据第三种算法可知次数不为素数*/ j ++; } if(flag) printf("%d\t",i); i++; } printf("\n"); return 0; }
四、求素数的函数?
代码示例:
int sushu(int x)
{
for(int i=2;i<=sqrt(x);i++)
{
if(x%i==0)
return 0;
}
return 1;
}
int sushu(long long num)
{
if(num == 1) return 0;
if(num ==2|| num==3 ) return 1 ;
if(num %6!= 1&&num %6!= 5) return 0 ;
int tmp =sqrt( num);
for(int i= 5;i <=tmp; i+=6 )
if(num %i== 0||num %(i+ 2)==0 )return 0 ;
return 1 ;
}
void zhi()
{
for(int i=2;i<=n;i++)
{
if(p[i]==0)
{
pri[t]=i;
t++;
for(int j=i+i;j<=n;j+=i)
{
p[j]=1;
}
}
}
}
五、小于一亿的孪生素数对有多少?
小于100000的自然数中有1224对孪生质数,小于1000000的自然数中有8164对孪生质数,小于33000000的自然数中有152892对孪生质数
六、n是正整数,若2的n次方—1为素数,证明:n必为素数?
若n为合数,即设n=ab(a,b∈N+,且不为1),有,2^n-1=(2^a)^b-1^b,那么(2^a)^b-1^b可以因式分解,一定有2^a-1整除(2^a)^b-1^b,2^a-1>1,所以若n为合数,2^n-1也为合数。
与已知矛盾。所以2^n—1为素数,n必为素数。顺便一说,形如2^p-1的质数被称为梅森数。七、为什么求素数是从二到根号N?
如果N是合数,则必有一个小于或者等于根号N的素因子.因为任何合数都可表示为两个或者更多个素数之积.假如N是合数且其素因子都大于根号N,那么将产生矛盾:根号N*根号N>N.所以合数必有(至少)一个不大于根号N的素因子.不知楼主明白了吗?
八、n以内的素数的个数公式?
无法提供一个统一的公式来定义n以内有多少个素数,但是可以设计一个算法来计算。
private int getNum(int n)
{
int num = 0;
int isPrime = 0;
//1不是素数,这里从2开始计算
if(n<2)
return num;
//从2到n依次验证是否素数
for(int i=2;i<=n;i++)
{
//用2从这个数的一半去试探能否整除这个数
for(int j=2;j<=i/2;j++)
{
//能整除,就是素数
if(i%j==0)
isPrime = 1;
}
if(isPrime==1)
num++;
isPrime = 0;
}
//返回素数个数
return num;
}
九、求n的阶乘java代码
今天我们来探讨如何使用Java编写求n的阶乘的代码。计算阶乘是一个常见的数学问题,对于初学者来说,掌握编写阶乘计算代码是很重要的一步。在Java中,我们可以通过递归或循环的方式来实现求n的阶乘功能。
递归方法
递归是一种在函数内调用自身的方法。对于阶乘问题,我们可以使用递归来简洁地实现代码。
下面是一个使用递归方法求n的阶乘的Java代码:
public class Factorial {
public static int factorial(int n) {
if (n == 0) {
return 1;
} else {
return n * factorial(n - 1);
}
}
public static void main(String[] args) {
int n = 5;
int result = factorial(n);
System.out.println("Factorial of " + n + " is: " + result);
}
}
在上面的代码中,我们定义了一个Factorial类,其中包含一个静态方法factorial用于计算阶乘。当输入的n为0时,返回1;否则,返回n乘以n-1的阶乘。
循环方法
除了递归方法外,我们还可以使用循环来实现求n的阶乘。这种方法通常比递归更有效率,尤其是对于大数值的阶乘计算。
以下是一个使用循环方法求n的阶乘的Java代码示例:
public class Factorial {
public static int factorial(int n) {
int result = 1;
for (int i = 1; i <= n; i++) {
result *= i;
}
return result;
}
public static void main(String[] args) {
int n = 5;
int result = factorial(n);
System.out.println("Factorial of " + n + " is: " + result);
}
}
在上面的代码中,我们同样定义了一个Factorial类,利用循环的方式计算阶乘。我们初始化result为1,然后利用for循环遍历1到n的所有数,依次相乘得到最终结果。
选择递归还是循环?
在选择使用递归还是循环来计算阶乘时,需要根据实际情况进行权衡。递归方法简洁易懂,但可能存在堆栈溢出的风险,尤其是对于大数值的计算。循环方法效率更高,适合处理大规模的计算。
因此,在实际编程中,可以根据需求和性能要求来选择合适的方法。无论是递归还是循环,都是实现阶乘计算的有效方式。
总结
通过本文的讨论,我们了解了在Java中如何编写求n的阶乘的代码。无论是使用递归还是循环,都可以实现这一常见数学问题的解决方案。在编写代码时,需要考虑到代码的简洁性和性能,根据实际情况选择合适的方法。
希望本文能够帮助您更好地理解阶乘计算的实现过程,提升您的Java编程能力。谢谢阅读!
十、怎么求1000以内的素数?
可以编写一个素数考察函数,在主函数中调用该函数对1000以内的整数穷举考察求解,也可以在主函数中直接对1000以内的整数穷举考察求解。这里提供一个用筛选法求解的代码,思路是声明一个大于等于1000个元素的char型(int型当然也可以,这里只是为了减少空间开销)数组并全部初始化为1,对下标不是素数的元素清0,最后依次输出不为0元素的下标便是题解。为提高操作效率,用2~33间(33^2>1000了,所以考察已充分了)的素数去除大于这个素数而小于等于1000的不为0的数,能整除的便将这个下标的元素清0。当用小于33的最大素数考察完毕后,依次输出数组中不为0的元素下标即可。代码如下:
#include "stdio.h"int main(int argc,char *argv[]){ int i,j; char m[1001];//声明char型数组作为筛选对象 for(m[0]=m[1]=0,i=2;i<=1000;m[i++]=1);//m[0]和m[1]赋0,其余赋1备选 i=2;//考察次数2~33,用期间的素数去除大于i且小于等于1000间不为0的数 while((j=i)<33){ while(!m[++j]);//取j为大于i的第一个不为0的数为起始考察对象 while(j<=1000){ if(j%i==0)//这个数若能被小于它的素数整除则以它为下标的元素清0 m[j]=0; while(!m[++j]);//下一个不为0的数为考察对象 } while(!m[++i]);//2~33间的下一个素数 } for(j=i=0;i<=1000;i++)//以下是输出 if(m[i])//不为0的数组元素的下标便是素数 printf(++j%20 ? "%4d" : "%4d\n",i);//每行输出20个 if(j%20) printf("\n"); return 0;}
运行结果如下:


- 相关评论
- 我要评论
-