C语言 输出任意两个数之间的质数
2017-10-06 19:54
351 查看
#include<stdio.h>
static int isPrime(int n);
void main()
{
int low,high;
int flag=1;
while(flag==1)
{
printf("输出两个数(一空格分割):");
scanf("%d %d",&low,&high);
/*
//3.利用异或运算来交换数据
// 利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围
unsigned int a=60; //0011 1100
unsigned int b=13; //0000 1101
printf("交换之前:a=%d,b=%d\n",a,b); //输出a,b的值
a=a^b; //a=a^b=0011 0001
b=a^b; //b=a^b=0011 1100
a=a^b; //a=a^b=0000 1101
printf("交换之后:a=%d,b=%d\n",a,b); //输出a,b的值
*/
//如果low输入的值大了,交换,保证low的值小于high
if(low>high)
{
low=low^high;
high=low^high;
low=low^high;
}
int i;
static int first=0;
int count=0;
for(i=low;i<high;i++)
{
if(isPrime(i)==1)//如果i是质数
{
//输出逗号,第一个逗号屏蔽
if(first==1)
{
printf(",");
//每十个束素数一行
if(++count%10==0)
printf("\n");
}
else first=1;
printf("%5d",i);//输出素数
}
}printf("。");
printf("\n继续[1/0]?:");
scanf("%d",&flag);
}
}
static int isPrime(int n)//判断n 是不是质数
{
if(n<=1)
return -1;
int ISPrime=1;//默认是质数,用1表示
int i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)//如果找到一个其他的因数
{
ISPrime=0;//不是质数
break;
}
}
return ISPrime;
}
测试:
java实现:
package Ctojava;
import java.util.Scanner;
public class printPrimeN_M
{
public static void main(String[] args)
{
int low,high;
Scanner scanner=new Scanner(System.in);
low=scanner.nextInt();
high=scanner.nextInt();
if(low>high)
{
low^=high;high^=low;low^=high;
}
boolean printComma=false;
for(int i=low;i<high;i++)
{
if(isPrime(i))
{
if(printComma)
System.out.print(",");
else
printComma=true;
System.out.print(i);
}
}
}
public static boolean isPrime(int n)
{
if(n<=1)
return false;
for(int i=2;i<=Math.sqrt(n);i++)
{
if(n%i==0)//如果找到一个因数
return false;//那就不是质数
}
//如果没有找到因数
return true;//那就是
}
}
测试:
1 100
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
static int isPrime(int n);
void main()
{
int low,high;
int flag=1;
while(flag==1)
{
printf("输出两个数(一空格分割):");
scanf("%d %d",&low,&high);
/*
//3.利用异或运算来交换数据
// 利用的思想原理是:一个数异或同一个数两次,结果还是那个数,而且不会超出int范围
unsigned int a=60; //0011 1100
unsigned int b=13; //0000 1101
printf("交换之前:a=%d,b=%d\n",a,b); //输出a,b的值
a=a^b; //a=a^b=0011 0001
b=a^b; //b=a^b=0011 1100
a=a^b; //a=a^b=0000 1101
printf("交换之后:a=%d,b=%d\n",a,b); //输出a,b的值
*/
//如果low输入的值大了,交换,保证low的值小于high
if(low>high)
{
low=low^high;
high=low^high;
low=low^high;
}
int i;
static int first=0;
int count=0;
for(i=low;i<high;i++)
{
if(isPrime(i)==1)//如果i是质数
{
//输出逗号,第一个逗号屏蔽
if(first==1)
{
printf(",");
//每十个束素数一行
if(++count%10==0)
printf("\n");
}
else first=1;
printf("%5d",i);//输出素数
}
}printf("。");
printf("\n继续[1/0]?:");
scanf("%d",&flag);
}
}
static int isPrime(int n)//判断n 是不是质数
{
if(n<=1)
return -1;
int ISPrime=1;//默认是质数,用1表示
int i;
// for(i=2;i<=n/2;i++)//一个数 n 如果是合数,那么它的所有的因子不超过sqrt(n)
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)//如果找到一个其他的因数
{
ISPrime=0;//不是质数
break;
}
}
return ISPrime;
}
测试:
输出两个数(一空格分割):2 234 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233。 继续[1/0]?:1 输出两个数(一空格分割):234 56 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233。 继续[1/0]?:1 输出两个数(一空格分割):567 334 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563。 继续[1/0]?:0
java实现:
package Ctojava;
import java.util.Scanner;
public class printPrimeN_M
{
public static void main(String[] args)
{
int low,high;
Scanner scanner=new Scanner(System.in);
low=scanner.nextInt();
high=scanner.nextInt();
if(low>high)
{
low^=high;high^=low;low^=high;
}
boolean printComma=false;
for(int i=low;i<high;i++)
{
if(isPrime(i))
{
if(printComma)
System.out.print(",");
else
printComma=true;
System.out.print(i);
}
}
}
public static boolean isPrime(int n)
{
if(n<=1)
return false;
for(int i=2;i<=Math.sqrt(n);i++)
{
if(n%i==0)//如果找到一个因数
return false;//那就不是质数
}
//如果没有找到因数
return true;//那就是
}
}
测试:
1 100
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
相关文章推荐
- Java实现 输出 任意两个数之间的斐波那契序列
- 用c语言编写输出四个整数,这四个整数可以表示1到40之间的任意一个数字。
- 输出任意两个数之间的所有素数
- c语言:3种方法;求出0~999之间的所有“水仙花数”并输出。
- C语言—正序,逆序输出任意整数的每一个数字
- C语言从键盘输入两个数,求两个数之间素数的个数并打印所有素数(定义法)
- 【C语言】要求任意输入10个数,然后按从小到大顺序输出
- 题目:输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)。如果有多对数字的和等于输入的数字,输出任意一对即可。 例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,
- C语言---递归反向输出任意长度的字符串
- JavaScript获取两个数之间的任意随机数
- c++第二次作业 1,个人所得税计算器 2,输出1000-10000之间,个位和千位相等的所有质数
- 输出1~100之间的所有质数
- C语言从键盘输入一个十进制数将其转换为任意进制数输出
- 【C语言】任意进制之间的转换(支持小数部分)
- 输入一个递增的数组和一个数字s,找出数组中任意两个数使他们的和正好是这个数字s,如果有任意多对数字的和为s,输出任意一堆数字即可,例如,输入数组[1,2,4,7,11,15]和数字
- 题目:判断101-200之间有多少个质数,并输出所有质数。
- C语言 判断1000年---2000年之间的闰年,并输出闰年
- java第三周--(输出任意数之间的所有完数;3位数的任意整数,输出其降序数)
- OPENMP 实现判断任意两个数之间的素数个数
- C语言---递归反向输出任意长度的字符串