输出1000以内的素数

记得以前也写过,当时不会写是看了别人的答案才写出来的,今天再写发现还是不会写,看来上次是根本就没有学会呀,不过苦思冥想还是想出来一种不那么好的方法,好在自己理顺了思路,是自己研究出来的成果。

输出1000以内的素数,那么只需要每次取出一个数,然后把这个数依次除以从2到它本身,看余数,如果余数有0的情况,那么一定不是素数,如果全部除完了发现都没有余数为0的情况,那么一定是素数。

比如判断7是不是素数,必须看7%[2,6]的结果。

容易发现,不是素数这个条件比较容易满足,因为只要有一个余数为0的情况就能判定,那么在程序里面就这么判断。

还有个问题,如果一7%[2,6]的过程中有一个余数位0的情况,那么就不用往下判断了,因为没有必要了,可以直接break

还有一个问题,在注释里面说清楚了。

int main(void)
{
    /*
	输出1000以内的质数
	*/

	int m;
	int n;
	for (n=2;n<=1000;n++)
	{
		for (m = 2; m < n; m++)
		{
			if (n % m == 0)
			{
				break;
			}
		}

		/*
		一个数是素数或者不是素数流程都会到达这里
		该怎么区分这两种情况呢?
		如果是素数,那么一定是进入循环了,那么一定满足
		m<n而且没来得及执行m++,因为是素数就break了。

		所以m<n一定能推出n不是素数。

		如果是一个数是素数,那么意味着里层for循环走完了,走完的原因是因为不满足m<n这个条件了
		那么此时的m一定是等于n的。

		所以m==n一定能推出n是素数
		*/

		 if(m==n)
		{
			printf("%d ",n);
		}
	}

	return 1;
}

  

原文地址:https://www.cnblogs.com/yfish/p/9788295.html

时间: 2024-08-06 07:58:44

输出1000以内的素数的相关文章

一道面试题:用多线程求1000以内的素数有多少个?并给出消耗时间

我曾经去一个公司面试,遇到这么一个题目:求1000以内的素数有多少个?用多线程实现,并给出消耗时间.我想了半天,没有想出多线程的解决方案.今天因为机缘到了,我浅谈下我的解法. 这道题,显然得考虑两个问题: 1.多线程的问题 2.算法性能问题 有人觉得1000以内还考虑什么算法性能?这肯定很快.但是话说回来,这个都有必要用多线程吗?如果我们求10000000以内的素数有多少个?是不是必须考虑以上两个问题了?多线程和算法优化的目的都是为了提高程序执行的效率.我们首先来考虑算法问题,什么是素数?素数:

判断素数和输出100以内的素数

判断素数 public class Au { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int n = in.nextInt(); int isprime = 1; for(int i=2; i<n; i++){ if(n%i == 0){ isprime = 0; break; } } if(isprime ==

使用C#语言实现输出1000以内的水仙花数

所谓水仙花数,是指一个n位数(n>=3),它的每个位上的数字的n次幂之和等于它本身,例如:153=13+53+33.首先,我们应该解决的关键问题是,怎么通过C#语言判断一个数是不是水仙花数?既然水仙花数的定义是每个位上的数字的n次幂之和等于它本身,那么我们需要先分别得到一个数每个位上的数字,然后判断每个位上的数字的n次幂之和是否等于等于它本身.取出百位的数字可以使用 int a=i/100%10:(其中变量a存储百位数字.先将变量i中的值除以100,因为被除数和除数都是int类型的值,所以得到值

【C语言】输出1000以内所有完数

1 #include<stdio.h> 2 int main() 3 { 4 int i,j,k; 5 for(i=1;i<1000;i++) 6 { 7 int sum=0; 8 for(j=1;j<i;j++) 9 { 10 if(i%j==0){ 11 sum+=j; 12 } 13 } 14 if(sum==i){ 15 printf("%d its factors are ",i ); 16 for(k=1;k<i;k++) 17 { 18 if

python求1000以内的素数

import timedef isPrime(n): for i in range(2,int(n**0.5)+1): if n % i==0: return False else: return True strPrimes=""t=time.clock()for j in range(2,1000): if isPrime(j): strPrimes=strPrimes+str(j)+"," print(strPrimes)print("Time us

c语言输出2~100的素数

这个代码很巧妙,个人的理解都写在了注释里 #include <stdio.h> #include <stdlib.h> #include <math.h> //相关的论文:[1]张景龙,黄静,王爱松等.素数判定算法的改进[J].河南科技学院学报(自然科学版),2013,(6):61-64.DOI:10.3969/j.issn.1008-7516.2013.06.015. //输出100以内的素数,思路: //判断素数方法1: //假如自然数N不是素数,则除1和其本身之外

实现100以内的素数输出(Python与C++对比)

今天从链接http://www.2cto.com/kf/201302/187699.html中看到了Python实现100以内的素数输出的算法,颇受感触.尤其是被其中的Python的列表生成器的使用方式帅到了! 看完Python的算法实现之后,先是回到老本行用C++实现了一遍,通过对比,你就可以发现Python真的是太简洁了!!! 1 /* 2 题目:100以内的素数输出算法验证 3 时间:2015年9月11日 4 作者:LeonWen 5 */ 6 7 #include "stdafx.h&q

【Python实践-7】输出100以内的所有素数

1 #输出100以内的所有素数,素数之间以一个空格区分(注意,最后一个数字之后不能有空格). 2 i=2 3 l=[] 4 while i<100: 5 k=0 6 for j in range(2,i): 7 if i%j==0: 8 k=k+1 9 if k==0: 10 l.append(i) 11 i=i+1 12 print(" ".join(str(i) for i in l)) 知识点: 1.素数,又称质数,定义为在大于1的自然数中,除了1和它本身以外不再有其他因数

Java版求1000以内的完全数

/* * 若一个自然数,它所有的真因子(即除了自身以外的约数)的和恰好等于它本身,这种数叫做完全数,简称完数. * 例如:6=1+2+3. * 题目:求1000以内的完全数. */ public class PerfectNumber { // 数字上限 static Integer limit = 1000; public static void main(String[] args) { System.out.println(limit + "以内的完全数有:"); fun(lim