質數(prime number)又稱素數,有無限個。質數定義為在大於1的自然數中,除了1和它本身以外不再有其他因數的數稱為質數,如:2、3、5、7、11、13、17、19。
方法一:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
num=[];
i=2
for i in range(2,100):
j=2
for j in range(2,i):
if(i%j==0):
break
else:
num.append(i)
print(num)
方法二:
import mathdef
func_get_prime(n):
return filter(lambda x: not [x%i for i in range(2, int(math.sqrt(x))+1) if x%i ==0], range(2,n+1))
print func_get_prime(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]
希望我的回答對你有幫助!
㈡ 編寫一個C語言程序判斷一個數是否是素數
目的:判斷一個數是否為素數
#include<stdio.h>
intmain(void)
{
int m;
inti;
scanf("%d",&m);
for(i=2;i< m;i++) //2到(m-1)的數去除m
{
if(m%i==0)//判斷能否整除
break;
}
if(i== m)
printf("YES!
");
else
printf("No!
");
}
for循環的功能:
①若能整除,通過break跳出函數;
②若一直到m-1都不能整除,此時i再自增1到m,不滿足i< m跳出for循環,這時i= m。
(2)編程找出素數擴展閱讀:
素數定理:
1、在一個大於1的數a和它的2倍之間(即區間(a,2a]中)必存在至少一個素數。
2、存在任意長度的素數等差數列。
3、一個偶數可以寫成兩個合數之和,其中每一個合數都最多隻有9個質因數。(挪威數學家布朗,1920年)。
4、一個偶數必定可以寫成一個質數加上一個合成數,其中合數的因子個數有上界。(瑞尼,1948年)。
5、一個偶數必定可以寫成一個質數加上一個最多由5個因子所組成的合成數。後來,有人簡稱這結果為(1+5)(中國潘承洞,1968年)。
6、一個充分大偶數必定可以寫成一個素數加上一個最多由2個質因子所組成的合成數。簡稱為(1+2)。
㈢ C語言編程找出100以內素數
1.素數就是一個大於1的自然數,除了1和它本身外,不能被其他自然數整除
#include<stdio.h>
boolIsPrime(intn)
{
if(n<=1)returnfalse;
if(n%2==0)returnn==2;
for(inti=3;;i+=2)
{
if(i>n/i)break;//等價於i*i>n,不用開方
if(n%i==0)returnfalse;
}
returntrue;
}
intmain()
{
for(intn=0;n<=100;n++)
if(IsPrime(n))
printf("%3d",n);
return0;
}
㈣ 用C語言編程找出素數,要求定義個函數,在指定范圍內比如7位數內找出素數,統計個數並輸出,初學者
忘了計數了,改下:
#include "stdafx.h"
#include <iostream>
using namespace std;
int sushu(int k)
{
int yes = 1;
for (int i = 2; i <= sqrt(k); i++)
if (k%i == 0)
yes = 0;
return yes;
}
int main()
{
int n,count=0;
cout << "請輸入數字范圍:" << endl;
cin >> n;
for (int i = 2; i <= n; i++)
{
if (sushu(i))
{
cout << i << " ";
count++;
}
}
cout << "總數:" << count << endl;
system("pause");
return 0;
}
㈤ python中如何編程求1到100之間的素數
1、新建python文件,testprimenum.py;
㈥ 求"求素數的C語言程序"
#include <stdio.h>
int main()
{
int a=0;
int num=0;
int i;
printf("輸入一個整數:");
scanf("%d",&num);
for(i=2;i<num;i++){
if(num%i==0){
a++;
}
}
if(a==0){
printf("%d是素數。 ", num);
}else{
printf("%d不是素數。 ", num);
}
return 0;
}
(6)編程找出素數擴展閱讀:
質數又稱素數。一個大於1的自然數,除了1和它自身外,不能被其他自然數整除的數叫做質數;否則稱為合數。
基本演算法:若 k%m==0 則說明 k 不是素數。
判斷整數n是否為素數——採用枚舉法求解。
採用枚舉演算法解題的基本思路:
(1)確定枚舉對象、枚舉范圍和判定條件;
(2)枚舉可能的解,驗證是否是問題的解。
枚舉演算法的一般結構:while循環。
參考資料來源:網路-枚舉法
㈦ 編程輸出1000以內的所有素數
先找出素數的特徵,然後寫循環。
for(int i=2;i<1000;i++){
for(int j=i/2;j>=0;j--){
if(j==1){
printf("%d ",j);break;
}
if(i%j==0)break;
}
}
(7)編程找出素數擴展閱讀:
對於B=36N+1 形數而言。
若不定方程(3N)^2+N-(B-1)/36=W^2 有整數解,
則 6(3N-W)+1 是小因子數;6(3N+W)+1 是大因子數。
若不定方程 (3N)^2-N-(B-1)/36=W^2 有整數解,
則 6(3N-W)-1 是小因子數;6(3N+W)-1 是大因子數。
兩式都無解,是素數。
㈧ C語言求100以內素數的問題
#include<stdio.h>
int main()
{
int i=0;
int count=0;
for(i=0;i<=100;i++)
{
int j=0;
for(j=2;j<=i;j++)
{
if(i%j==0)
{
break;
}
}
if(i==j)
{
count++;
printf("%d ",i);
}
}
printf(" count=%d ",count);
return 0;
}
解題思路:
素數,就是除了1和他本身,不能被其他數整除的數字。答案就是用100到200之間的每個數字,除以2到其本身前面的那一個數字,如果此過程中出現整除的現象,則該數不是素數。如果沒有整除的現象,則該數為素數輸出。
(8)編程找出素數擴展閱讀:
質數又稱素數。一個大於1的自然數,除了1和它自身外,不能整除其他自然數的數叫做質數;否則稱為合數。
質數的個數是無窮的。歐幾里得的《幾何原本》中有一個經典的證明。它使用了證明常用的方法:反證法。具體證明如下:假設質數只有有限的n個,從小到大依次排列為p1,p2,……,pn,設N=p1×p2×……×pn,那麼,要大於p1,p2,……,pn,所以它不在那些假設的素數集合中。
㈨ 在編程中怎樣確定一個數是不是素數
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15=3*5,所以15不是素數;又如,12=6*2=4*3,所以12也不是素數。另一方面,13除了等於13*1以外,不能表示為其它任何兩個整數的乘積,所以13是一個素數。
有的數,如果單憑印象去捉摸,是無法確定它到底是不是素數的。有些數則可以馬上說出它不是素數。一個數,不管它有多大,只要它的個位數是2、4、5、6、8或0,就不可能是素數。此外,一個數的各位數字之和要是可以被3整除的話,它也不可能是素數。但如果它的個位數是1、3、7或9,而且它的各位數字之和不能被3整除,那麼,它就可能是素數(但也可能不是素數)。沒有任何現成的公式可以告訴你一個數到底是不是素數。你只能試試看能不能將這
個數表示為兩個比它小的數的乘積。
找素數的一種方法是從2開始用「是則留下,不是則去掉」的方法把所有的數列出來(一直列到你不想再往下列為止,比方說,一直列到10,000)。第一個數是2,它是一個素數,所以應當把它留下來,然後繼續往下數,每隔一個數刪去一個數,這樣就能把所有能被2整除、因而不是素數的數都去掉。在留下的最小的數當中,排在2後面的是3,這是第二個素數,因此應該把它留下,然後從它開始往後數,每隔兩個數刪去一個,這樣就能把所有能被3整除的數全都去掉。下一個未去掉的數是5,然後往後每隔4個數刪去一個,以除去所有能被5整除的數。再下一個數是7,往後每隔6個數刪去一個;再下一個數是11,往後每隔10個數刪一個;再下一個是13,往後每隔12個數刪一個。……就這樣依法做下去。
你也許會認為,照這樣刪下去,隨著刪去的數越來越多,最後將會出現這樣的情況;某一個數後面的數會統統被刪去崮此在某一個最大的素數後面,再也不會有素數了。但是實際上,這樣的情況是不會出現的。不管你取的數是多大,百萬也好,萬萬也好,總還會有沒有被刪去的、比它大的素數。
事實上,早在公元前300年,希臘數學家歐幾里得就已證明過,不論你取的數是多大,肯定還會有比它大的素數,假設你取出前6個素數,並把它們乘在一起:2*3*5*7*11*13=30030,然後再加上1,得30031。這個數不能被2、3、5、7、11、13整除,因為除的結果,每次都會餘1。如果30031除了自己以外不能被任何數整除,它就是素數。如果能被其它數整除,那麼30031所分解成的幾個數,一定都大於13。事實上,30031=59*509。
對於前一百個、前一億個或前任意多個素數,都可以這樣做。如果算出了它們的乘積後再加上1,那麼,所得的數或者是一個素數,或者是比所列出的素數還要大的幾個素數的乘積。不論所取的數有多大,總有比它大的素數,因此,素
數的數目是無限的。
隨著數的增大,我們會一次又一次地遇到兩個都是素數的相鄰奇數對,如5,7;11,13;17,19;29,31;41,43;等等。就數學家所能及的數來說,它們總是能找到這樣的素數對。這樣的素數對到底是不是有無限個呢?誰也不知道。數學家認為是無限的,但他們從來沒能證明它。這就是數學家為什麼對素數感興趣的原因。素數為數學家提供了一些看起來很容易、但事實卻非常難以解決的問題,他們目前還沒能對付這個挑戰哩。
迄今為止,人類發現的最大的素數是 224036583-1,這是第 41 個 梅森(Mersenne)素數。
素數也叫質數,是只能被自己和 1 整除的數,例如2、3、5、7、11等。2500 年前,希臘數學家歐幾里德證明了素數是無限的,並提出少量素數可寫成「2 的n次方減 1」的形式,這里 n 也是一個素數。此後許多數學家曾對這種素數進行研究,17 世紀的法國教士馬丁·梅森(Martin Mersenne)是其中成果較為卓著的一位,因此後人將「2的n次方減1」形式的素數稱為梅森素數。
第19~41個梅森素數
序號 素數 位數 發現人 時間
41 224036583-1 7235733 John Findley 2004
40 220996011-1 6320430 Michael Shafer 2003
39 213466917-1 4053946 Michael Cameron 2001
38 26972593-1 2098960 Nayan, Woltman, Kurowski 1999
37 23021377-1 909526 Clarkson, Woltman, Kurowski 1998
36 22976221-1 895932 Spence, Woltman 1997
35 21398269-1 420921 Armengaud, Woltman 1996
34 21257787-1 378632 Slowinski & Gage 1996
33 2859433-1 258716 Slowinski & Gage 1994
32 2756839-1 227832 Slowinski & Gage 1992
31 2216091-1 65050 David Slowinski 1985
30 2132049-1 39751 David Slowinski 1983
29 2110503-1 33265 Welsh & Colquitt 1988
28 286243-1 25962 David Slowinski 1982
27 244497-1 13395 Slowinski & Nelson 1979
26 223209-1 6987 L. Curt Noll 1979
25 221701-1 6533 Nickel & Noll 1978
24 219937-1 6002 Bryant Tuckerman 1971
23 211213-1 3376 Donald B. Gillies 1963
22 29941-1 2993 Donald B. Gillies 1963
21 29689-1 2917 Donald B. Gillies 1963
20 24423-1 1332 Alexander Hurwitz 1961
19 24253-1 1281 Alexander Hurwitz 1961
1995 年,美國程序設計師喬治·沃特曼整理有關梅森素數的資料,編制了一個梅森素數計算程序,並將其放置在網際網路上供數學愛好者使用,這就是「因特 網梅森素數大搜索」計劃。目前有6萬多名志願者、超過20萬台計算機參與這項計劃。該計劃採取分布式計算方式,利用大量普通計算機的閑置時間,獲得相當於 超級計算機的運算能力,第 37、38 和 39 個梅森素數都是用這種方法找到的。美國一家基金會還專門設立了 10 萬美元的獎金,鼓勵第一個找到超過千萬位素數的人。
㈩ 如何用編程尋找質數
以下的程序用來尋找n以內的所有質數:
#include<stdio.h>
int isprime(int n)
{ for(int i=2; i*i<=n; i++)
if(n%i==0)return 0;
return n>1;
}
int main()
{ int n,i,k=0;
scanf("%d",&n);
for(i=2; i<=n; i++)
if(isprime(i))
{ printf("%d ",i);
if(++k%10==0)printf(" ");
}
printf(" ");
return 0;
}