⑴ 请把你们所知道的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; i<n; i++) {
if(n%i==0)
return false;
}
return true;
}
void initial()
{
int i,j;
kase = 0;
for(i=1; i<21; i++){
for(j=i; j<21; j++) {
P[i][j] = Prime(i+j);
P[j][i] = P[i][j];
}
}
}
void Print()
{
int i;
for(i=0; i<N-1; i++)
fin<<result[i]<<" ";
fin<<result[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;
cin>>N;
start1 = clock();
fin<<"Case "<<++kase<<":"<<endl;
for(i=2; i<=N; i++)
in[i] = false;
if(N%2 == 0)
hziee(1);
fin<<endl;
end1 = clock();
fin<< double(end1 - start1) / CLK_TCK <<endl;
return 0;
}
⑵ C语言质数的问题,求详解
判断质数嘛,方法就是对2到本身-1取余,为0的就不是质数了
比如12,12取余2为0,不是质数
13取余2,3,4,5,...到12都为1,为质数
其实从7到12的判断是多余的,只要判断到13/2=6就可以了.
懂了吗,后一个for循环只是跳过多余的判断,没有也一样
⑶ c语言中,为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。
这里开始的y=1,是预定的判别,然后在各个循环里选择y的值,从而判断和为a的两个数b,c是否为质数,倘若y不变,则该数是质数。
d=a-i就是表示的和为a的另一个数,为了对此变量表达更清晰,采用差来表示,最后还是赋值给了c,不是吗?自己再看看就明白了
⑷ 标准C语言查找质数问题,求质数的问题,请看如下
帮你现写了一个程序如下:
#include<stdio.h>
intmain()
{
intM,N,cnt=0;
ints[100]={0};
printf("请输入两个整数:");
scanf("%d,%d",&M,&N);
for(inti=M;i<=N;i++)
{
intt=0;
for(intj=1;j<=i;j++)
{
if(i%j==0)
t++;
}
if(t==2)
{
s[cnt]=i;
cnt++;
}
}
printf("%d到%d之间总共有%d个素数,分别如下: ",M,N,cnt);
for(intk=0;k<cnt;k++)
printf("%d ",s[k]);
printf(" ");
return0;
}
运行结果如下:
⑸ 关于C语言找质数
#include<stdio.h>
#include<math.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语言找素数(质数)while语句
给出代码如下:
#include<stdio.h>
int main()
{
int i=2,n;
printf("请输入一个数:");
scanf("%d",&n);
while(n%i!=0&&i<n)//给出i<n方便理解while的变化
{
i++;//当n%i!=0时进行循环;
}
if(i<n)//在2至n中已经遍历完了。
printf("不是质数");
else
printf("是质数");
return 0;
}
⑺ 问C语言中 输入两个数字 求其中的质数 求算法
BOOL IsPrime(int integer)//素数判断
{
int i=2;
int j=(int)sqrt(integer);
while(TRUE)
{
if(integer%i==0)
{
return FALSE;
}
i++;
if(i>j)
{
break;
}
}
return TRUE;
}