本文目录一览:
- 1、请把你们所知道的C语言中找质数的算法都编出来告诉我,拜托了!
- 2、关于C语言找质数
- 3、c语言~找质数的问题~
- 4、用C语言编写求质数的程序
- 5、如何用穷举法在1—100之间找出所有的质数用C语言编程实现
- 6、用C语言找出2—100的以内所有的质数。
请把你们所知道的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就说明不是,其余的自己想吧,编程这个东西还是要靠自己