頁:
[1]
請幫忙……判決質數個數
題目:輸入兩個整數X和Y,輸出兩者之間的質數個數(包括X和Y)。Input:兩個整數X和Y,X和Y的大小任意。
Output:輸出一個整數,結果可以是0,也可以是大於0的整數。
我是新手……這個還做不出來……<div></div> 大概流程是這樣:用cin接收X和Y,然後用兩個for迴圈,
第一個迴圈i從x數到y,第二個迴圈j從1數到x,
如果i除以j餘數等於0,k就加1,
如果k=2,m加1,
最後輸出m,就是答案了 #include<iostream.h>
void main()
{
int x,y,i,j,k,m = 0;
cin>>x>>y;
for(j = x;j <= y;j ++)
{
i = 0;
for(k = 1;k <= j;k ++)
{
if(j % k == 0)
i ++;
}
if(i == 2)
m ++;
}
cout<<m;
}用2樓的演算法寫成的!! 三個方法給您參考
#include<stdio.h>
int isPrime(int); //判斷傳入的值是否為質數的函數
void main(){
int num,i;
printf("輸入 =>");
scanf("%d",&num);
if(isPrime(num)) printf("%d是質數\n",num); //呼叫函數並傳入num,若回傳1(true),則num為質數
else printf("%d不是質數\n",num); //否則就不是質數
printf("小於%d的質數有 => ",num);
for(i=2;i<num;i++){ //以迴圈將從2開始小於num的數都丟進去函數檢驗
if(isPrime(i))
printf("[%d]",i); //是質數則輸出
}
printf("\n");
}
int isPrime(int n){
int i;
for(i=2;i<n;i++){ //以迴圈將n各除以從2開始到小於自己的整數
if(n%i==0) //若有能整除他的則回傳0(false),表示他不是一個質數
return 0;
}
return 1; //迴圈跑完仍沒有能整除他的數出現,澤表示他為質數,回傳true
}
#include "stdafx.h"
#include <math.h>
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
inti, j, x, m;
printf( "輸入數值:" );
scanf( "%d", &x );
if( x < 2 )
printf( "無解\r\n" );
else if( x == 2 )
printf( "2\r\n" );
else
{
// 排除2以下的質, 所以從3開始判斷
for( m = 3 ; m <= x ; m += 2 )// 排除2的倍數
{
// 任一數的最大因數一定小於該數的平方根
j = (int)( sqrt( m ) );
for( i = 3 ; i <= j ; i += 2 )
if( ( m % i ) == 0 )
break;
if( i >= j )// 沒有任何可以整除的因數,所以為質數
printf( "%d\r\n", m );
}
if( m == x )
printf( "輸入的%d也是質數\r\n" );
else
printf( "輸入的%d不是質數\r\n" );
}
system("PAUSE");
return 0;
}
#include<iostream>
using namespace std;
bool isPrime (int x);
int main ()
{
int i,m;//答案是i,範圍是m。
cout<<"請輸入i:"<<endl;//輸入範圍。
cin>>m;//放入m。
for (i=2;i<=m;i++)//i從2開始,i小於等於m,i每次都+1。
{
if (isPrime(i))//如果i執行"isPrime"函數。
cout <<i<<"是質數" <<endl;//輸出i是質數,換行。
}
return 0;
}
bool isPrime (int x)
{
int i;
for (i=2;i<x;i++)//i從2開始,i小於x,i每次都+1。
{
if (x%i==0)//如果x被i整除。
{
return false;//回傳錯誤。(也就是不回傳值)
}
}
return true;//回傳正確值。(也就是回傳值)
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 這是質數相關的程式 妳可以參考這些 寫出你想要的程式碼 加油囉~
#include <iostream>
#include <stdio.h>
using namespace std;
static int count=0;
int main()
{
static int a=0;
for(int i=0 ;i <101 ; i++)
{
if(i%2 != 0 || i==2)
{
if(i%3 != 0 || i==3)
{
if(i%5 != 0 || i==5)
{
if(i%7 !=0 || i==7)
{
printf("質數 = %d" ,i);
a=a+i;
}
}
}
}
}
// a=a+2+3+5+7;
printf("\r\nANS = %d\n",a);
system("pause");
return 0;
}...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div><br><br><br><br><br><div></div> 參考看看,我的寫法。#include <stdio.h>
#include <stdlib.h>
int main(void){
int i,num,flag=1;
int j,sum=0;
int start,last;
printf("輸入從哪個數開始和結束數字");
scanf("%d%d",&start,&last);
printf("%d~%d的質數有:\n",start,last);
for(j=start;j<=last;j++){
num=j;
flag=1;
for(i=2;i*i<=num;i++){
if(num%i==0){
flag=0;
break;
}
}
if(flag==1&&num!=1){
sum=sum+1;
printf("%2d, ",num);
printf("第%d個質數\n",sum);
}
}
system("pause");
return 0;
}
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div> 如果要加快速度的話可以把x%y中的y用2~x開根號考慮就好 3# include
[*] for(k = 1;k <= j;k ++)[*] {[*] if(j % k == 0) -> 請問.. 這個地方在 k=1 的時候是不是就必成立??[*] i ++;[*] } 回八樓 k=1時一定會成立
演算法是二樓提供的
應該是沒有錯 回八樓
就是利用1和自己本身可除<br><br><br><br><br><div></div> 如果要加快速度的話可以把x%y中的y用2~x開根號考慮就好
adavis10006 發表於 2009-5-25 09:51 AM http://www01.eyny.com/images/common/back.gif
請問一下為什麼要開根號?
請問一下為什麼要開根號?
superppp 發表於 2009-5-26 01:46 PM http://www02.eyny.com/images/common/back.gif因數成對,a*b=X...若a=b又a可被X除 a*a=X a=根號(X),利用此可加速尋找速度.數學上有沒有特殊的名稱找不到.不過我比較好奇的是質數定理的發現.
頁:
[1]