❶ 用c语言编写求质数的程序
//我分别写出了求素数和判断素数的程序
/*
//判断一个数是否为素数
#include<stdio.h>
#include<math.h>
int
isprime(int);
void
main()
{
int
inumber;
printf("请输入一个非负整数:
");
scanf("%d",&inumber);
if(isprime(inumber))
printf("%d是素数!\
",inumber);
else
printf("%d不是素数!\
",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以内的素数为:\
",num);
for(m=2;m<=num;m++)
{
n=sqrt(m);
for(i=2;i<=n;i++)
{
if(m%i==0)
break;
}
if(i>n)//如果m是素数
{
printf("%6d",m);
count++;
if(count%10==0)//count为10的倍数时换行
printf("\
");
}
}
printf("\
");
return
0;
}
❷ C语言中求质数过程是怎样的
判断一个数是不是素数(就是你说的质数),用下面的方法(筛选法):
从2开始,那么2的倍数就不是素数;
然后是3,那么3的倍数就不是素数;
然后是5(4已经被排除了),那么5的倍数就不是素数。
以此类推。下面给出筛选法的代码(判断10以内的素数有几个,4个)
#include<stdio.h>
intmain(void)
{
inti,s,k,count=0;
for(i=100;i<=200;i++)
{
k=sqrt(i);
for(s=2;s<=k;s++)
{
if(i%s==0)break;
}
if(s==k+1)
count++;
}
printf("%d
",count);
for(i=100;i<=200;i++)
{
k=sqrt(i);
for(s=2;s<=k;s++)
{
if(i%s==0)break;
}
if(s==k+1)
printf("%d",i);
}
return0;
}
写的这么详细,不采纳我,好伤心。
❸ 关于C语言求质数的问题用单链表查找N以内的所有质数,输出时是俺从小到大顺序,N是通过键盘输入的任意
S1,用户输入N,创建链表结构体,使用MALLOC申请空间
S2,从2循环到N,逐个判断是否质数,然后不是质数的就跳过去,是质数的就将上一个链表的指针链接至此,并且以这个单元为起始指针
S3,输出链表
判断质数的源程序网上很多,自己挑一个写成子程序就行。
❹ 关于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语言的流程图 是关于判断素数的 看不太懂 麻烦解释一下过程
它的算法是:
输入n后,让i取值在2~n/2就循环,逐一比较看n能否被i整除;如果能被其中任何一个i的值整除,提前退出循环,否则i的值+1后继续。
当退出循环后检测,如果i的值<=n/2就说明它是提前退出循环的,n不是素数;否则说明n是素数。
至于i循环的范围,最大的是直接根据素数的定义,检测2~(n-1)
稍改进一点的,因为大于n/2的肯定不能整除,就只检测2~n/2
更优一点的,是根据n如果有除1和它自身之外的其它因子,至少有一个在2~√n之间,那么 i 的循环范围就只要 2~√n 就可以了。
❻ C语言求1到n所有质数
按照题目要求编写的程序如下(见图)
❼ 请把你们所知道的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语言题目,这儿的leap=1有什么用
leap=1是默认该数是素数,如果后面的条件m%i==0成立,则leap=0,则m不是素数,break后,m+=2再次进入循环。