您的位置:

关于c语言找质数,用c语言求质数

本文目录一览:

请把你们所知道的C语言中找质数的算法都编出来告诉我,拜托了!

//以前朋友写的一段C的,效率很高,我自己写的不及他

//Problem: Prime Ring Problem

//00:00.71 436K

//戴帽子的 2004-04-22

//=============================

#include iostream

#include ctime

#include fstream

using namespace std;

/*

#define cout out

ofstream fout("time.txt");

ofstream fin("hziee.txt");

ostream out = fin;

ostream timeout = fout;

*/

ofstream fin("hziee.txt");

int kase;

bool P[21][21];

short in[21];

short result[20];

short N;

bool Prime(int n)

{

int i;

for(i=2; in; i++) {

if(n%i==0)

return false;

}

return true;

}

void initial()

{

int i,j;

kase = 0;

for(i=1; i21; i++){

for(j=i; j21; j++) {

P[i][j] = Prime(i+j);

P[j][i] = P[i][j];

}

}

}

void Print()

{

int i;

for(i=0; iN-1; i++)

finresult[i]" ";

finresult[i]endl;

}

void hziee(int k)

{

int i;

if(k == N)

{

if(P[result[0]][result[N-1]])

Print();

return;

}

for(i=result[k-1]%2 + 1; i=N; i += 2) {

if(in[i])

continue;

if(P[result[k-1]][i]) {

result[k] = i;

in[i] = true;

hziee(k+1);

in[i] = false;

}

}

}

int main()

{

int i;

clock_t start, end, start1, end1;

start = clock();

initial();

end = clock();

cout double(end - start) / CLK_TCK endl;

in[1]=true;

result[0]=1;

cinN;

start1 = clock();

fin"Case "++kase":"endl;

for(i=2; i=N; i++)

in[i] = false;

if(N%2 == 0)

hziee(1);

finendl;

end1 = clock();

fin double(end1 - start1) / CLK_TCK endl;

return 0;

}

关于C语言找质数

#includestdio.h

#includemath.h

void main()

{

int i, j, n, l, m = 0;

printf("你需要小于多少的质数:\t");

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 ", i);

m++;

}

}

printf("一共有%d个这样的树", m);

}

c语言~找质数的问题~

明白了你的思路 可是按你的思路 你自己的算法有问题 我改了下你可以参考下 算法不是唯一的,你可以看看其他的算法 会比这个简单:)

从for循环开始改的

for(i=2;i=limit;i++)

{

while((j=i))

{

if(i%j == 0)//要用if 不然算法不对

{

sum = sum + j;

}

j=j+1;//要在这里,可以确保不进入死循环

}

if (sum==i)

{

printf("Sum of divisors for %d is %d\n", i, sum);

}

sum=0;//sum要清零

j=2;//j要清零

}

return 0;//应该返回个值 你定义的是int main()

}

用C语言编写求质数的程序

//我分别写出了求素数和判断素数的程序

/*

//判断一个数是否为素数

#includestdio.h

#includemath.h

int isprime(int);

void main()

{

int inumber;

printf("请输入一个非负整数: ");

scanf("%d",inumber);

if(isprime(inumber))

printf("%d是素数!\n",inumber);

else

printf("%d不是素数!\n",inumber);

}

int isprime(int a)

{

int i;

for(i=2;i=sqrt(a);i++)

if(a%i==0)

return 0;

return 1;

}

*/

/*****************************************************/

//求某个正整数以内的素数

#include"stdio.h"

#include"math.h"

int main(void)

{

int count,i,m,n,num;

printf("请输入所求范围(正整数): ");

scanf("%d",num);

count=0;//count记录素数的个数

printf("%d以内的素数为:\n",num);

for(m=2;m=num;m++)

{

n=sqrt(m);

for(i=2;i=n;i++)

{

if(m%i==0)

break;

}

if(in)//如果m是素数

{

printf("%6d",m);

count++;

if(count%10==0)//count为10的倍数时换行

printf("\n");

}

}

printf("\n");

return 0;

}

如何用穷举法在1—100之间找出所有的质数用C语言编程实现

对1-100的所有数进行遍历,逐一判断每个数是否为素数。

判断素数的算法有很多,比较基础的是逐一求余,如果除了1和本身外,还有其它数可以整除那么就不是素数。

代码如下:

#include stdio.h

int main()

{

    int i, j;

    for(i = 2; i  100; i ++)

    {

        for(j = 2; j  i; j ++)

        {

            if(i%j==0) break; //可以整除, 退出循环。代表不是素数。

        }

        if(j == i)//没有提前退出循环,代表是素数,打印。

            printf("%d,", i); //打印i值。

    }

    

    return 0;

}

用C语言找出2—100的以内所有的质数。

使用循环结构,除了2以外的偶数直接排除掉,因为不可能是质数,for(i=3;i=100;i=i+2){for(m=2;m=i;m++)下面的就自己进行判断吧,用i求余m,如果余数为0就说明不是,其余的自己想吧,编程这个东西还是要靠自己