c語言中素數判斷
A. c語言判斷素數
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int prime(int x){
for(int i=2;i<x;i++){
if(x%i==0)
return 0;
}
return 1;
}
int main(){
int a=0; // 素數的個數
int num[9]; // 輸入的整數
int numl[9]={0};
printf("輸入10個整數:\n");
cfu:
//有個小BUG需要輸入11個數,最後一個不算入計算之內。
for(int i = 0;i < 10;i++){
scanf("%d\n",&num[i]);
}
for (int i = 0;i < 10;i++)
{
if (num[i] >= 50 && num[i] <= 2000)
{
//判斷是不是素數;
if(prime(num[i])==1){
printf("%d 不是素數\n",num[i]);
}
else{
printf("%d 是素數\n",num[i]);
numl[a++] = num[i];
}
}else{
printf("請輸入50到2000之間的數\n");
goto cfu;
}
}
//排序寫在這里就可以了。
int lenth = a;
cout << "長度為: "<< lenth << endl;
for (int i = 0;i < lenth-1;i++)
{
for (int j = 0;j < lenth-1-i;j++)
{
if (numl[j] < numl[j+1] )
{
int temps = numl[j];
numl[j] = numl[j+1];
numl[j+1] = temps;
}
}
}
for (int i=0;i<lenth;i++)
{
printf("%d ",numl[i]);
}
while(1);
return 0;
}
//好像看錯題了,我的是輸入10個數判斷是否是素數,,,,,
//這個重新寫了一個,就符合題的意思了,你想輸出其他的素數就自己加條件,當成拓展就可以了.
#include "stdafx.h"
#include <iostream>
using namespace std;
int prime(int x){
for(int i= 2;i< x ; i++){
if(x%i == 0)
return 0;
}
return 1;
}
int _tmain(int argc, _TCHAR* argv[])
{
int m,k=0;
int arr[2000]={0};
printf("輸入50到2000之間的整數: ");
cfu:
scanf("%d",&m);
if (m >= 50 && m <= 2000)
{
//判斷在m以內有素數
for (int i =2;i < m; i++)
{
if (prime(i)==1){
printf("%d 是素數\n",i);
arr[k++]= i;
if (k == 10)
{
break;
}
}else{
printf("%d 不是素數\n",i);
}
}
}else{
printf("輸入50到2000之間的整數");
goto cfu;
}
cout << "K的值: "<< k << endl;
for (int i = 0;i < k-1;i++)
{
for (int j = 0;j < k-1-i;j++)
{
if (arr[j] < arr[j+1] )
{
int temps = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temps;
}
}
}
printf("10個數排序:");
for (int i = 0;i< k; i++)
{
printf("%d ",arr[i]);
}
while(1);
return 0;
}
B. C語言素數的判定
for(i=2;i<data;i++)
if(data%i!=0)
cnt++;//素數的個數
else
break;
你這樣肯定是不行的。
這樣只要找到一個不能整除的數,就判斷為了素數,比如data為9,你循環到2,9%2!=0,那麼你cnt++了
下面這個演算法是對的。
for(i=2;i<=half;i++)
if(data%i==0)
break;
//說明從2到data/2
中間存在一個可以整除data的數,那麼不是素數。
if(i>half)
{xx[n]=data;n++;} //i>half
說明循環到
data/2都沒找到一個可以整除的
數,那麼這個數就是素數了
C. C語言判斷素數
#include
"stdio.h"
main()
{
int
i=2;
int
n;
printf("input
n:");
scanf("%d",&n);
while(ii++;
if(i==n)
printf("YES\n");
else
if(iprintf("NO\n");
}
我也是新手,你犯的錯誤和我當初一樣,呵呵,
素數判斷是確定2~n-1范圍內沒有可以被n整除的數,
而你的判斷語句:
for(int
i=2;i{
a=m%i;
if
(a==0)
}
if
(a==0)
printf("NO\n");
else
printf("YES\n");
}
我們舉個例子,當n=9的時候,按照你的語句判斷,初始i=2,9/2不能整除,而你的判斷語句要求此時就printf("YES\n");,根本還沒有測試i=3的時候就已經循環結束了,
這個判斷錯誤主要是邏輯思路的問題,望樓主以後多多注意,不要和我一樣啊,呵
D. c語言如何判斷素數
素數又稱質數,所謂素數是指除了 1 和它本身以外,不能被任何整數整除的數,例如17就是素數,因為它不能被 2~16 的任一整數整除。判斷一個整數m是否是素數,只需把 m 被 2 ~ m-1 之間的每一個整數去除,如果都不能被整除,那麼 m 就是一個素數。
首先要知道素數是不等於1,它的因子只有1和它本身。判斷一個數是否為素數,可以用大於1小於給定數的所有數去除給定數,如果有任何一個能夠除盡,就表示是合數,反之是素數。
(4)c語言中素數判斷擴展閱讀:
首先,本文英文字母都表示整數,上半部B 》3N 》W,下半部B 》W 》3N。大於3的素數只有6N-1和6N+1兩種形式,我們只需判定這兩種數是素數還是合數即可。
命題 1 對於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 是大因子數。
兩式都無解,是素數。
E. 如何用c語言編程判斷一個數是不是素數
方法一:
#include<stdio.h>
int main(){
int i,j;
printf("請輸入一個正整數。\n");
scanf("%d",&i);
if(i<2)
printf("小於2,請重新輸入。\n");
elseif(i%2==0)
printf("%d不是一個素數。\n",i);
else{
for(j=2;j<=i/2;j++){
if(i%j==0){
printf("%d不是一個素數。\n",i);
break;
}
if(j>i/2){
printf("%d是一個素數。\n",i);
break;
}
}
}
}
方法二:
#include<stdio.h>
int main(){
int a=0;
int num=0;
scanf("%d",&num);
for(inti=2;i<num-1;i++){
if(num%i==0){
a++;
}
}
if(a==0){
printf("YES\n");
}else{
printf("NO\n");
}
}
方法三:
#include"stdio.h"
int main(){
printf("\t\t\t\t\thelloworld\n");
int a,i;
do{
printf("inputnumberjudgeprimenumber:\n");
scanf("%d",&a);
for(i=2;i<a;i++)
if(a%i==0)break;
if(i==a)
printf("%d是素數\n",a);
else
printf("%d不是素數\n",a);
}while(a!=0);
}
F. c語言判斷素數共有幾種方法
判斷是不是素數,素數就是只能被1和本身整除的自然數。
void
main()
{
int
m,i,k;
printf("please
input
a
number:\n");
scanf("%d",&m);
k=sqrt(m);
for(i=2;i<k;i++)
if(m%i==0)
break;
if(i>=k)
printf("該數是素數");
else
printf("該數不是素數");
}