Ⅰ c語言問題 【函數與過程】迴文素數
【題目】:
題目:如果一個數從左邊讀和從右邊讀都是同一個數,就稱為迴文數。例如6886就是一個迴文數,從給出的數據中統計出既是迴文數又是素數的數(<109)。
【思路分析】:
首先,你輸入的是整數(x),計算機不能像人腦一樣直接得到每個數位(數組a[10])。
所以,要先判斷數位(n),然後只要數位數組中a[i]=a[n-i]即可。
關於素數,設置一個for循環,只要從1到x都不存在能整除x的數,就是素數了。
【代碼如下】:
#include <stdio.h>
#include<windows.h>
int main()
{
int
a[1000];
int
n;//輸入整數的個數
printf("請輸入整數的個數:\n");
scanf("%d",&n);
int
i;
printf("請輸入這%d個整數:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
int
result_1;//值為1表示是迴文數,值為0表示不是。
int
result_2;//值為1表示是質數,值為0表示不是。
int
palindrome(int y);//判斷迴文數的函數
int
prime(int y);//判斷質數的函數
int
y;//y是要代入函數里的參數
int
num=0;//num用來計總共有幾個符合條件的數
int
b[1000];//b[1000]是符合要求的數組
for(i=0;i<n;i++)
{
result_1=0;//先使初值=0。
result_2=0;
y=a[i];
result_1=palindrome(y);
result_2=prime(y);
if((result_1==1)&&(result_2==1))
{
b[num]=a[i];
num++;
}
}
if(num>0)
{
printf("總共有%d個既是迴文數又是質數的數:\n",num);
for(i=0;i<num;i++)
printf("
%d",b[i]);
printf("\n");
}
else
printf("輸入的整數均不符合要求\n");
system("pause");
return 0;
}
int palindrome(int y)
{
int
a[10];//a[10]表示y的各個數位的值
int
i=0;
while(y>=1)
{
a[i]=y%10;//y%10就得到y的末位
y=y/10;//讓倒數第二位變成了末位
i++;//i最後又自加了一次,所以i就表示y有多少位
}
int
j;
int
z=1;
for(j=0;j<=(i-1)/2;j++)
{
if(a[j]!=a[(i-1)-j])
{
z=0;
break;
}
else
continue;
}
return
(z);
}
int prime(int y)
{
int
i,z;
z=1;
for
(i=2;i<y;i++)
{
if(y%i==0)
{
z=0;
break;
}
else
continue;
}
return(z);
}
【測試數據】:
n = 168
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 239 241 251 257 263 269 271
277 281 283 293 307 311 313 317 331 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 569 571 577 587 593 599 601 607 613 617 619 631 641 643 647
653 659 661 673 677 683 691 701 709 719 727 733 739 743 751 757 761 769 773 787
797 809 811 821 823 827 829 839 853 857 859 863 877 881 883 887 907 911 919 929
937 941 947 953 967 971 977 983 991 997
【測試結果】:
請輸入整數的個數:
168
請輸入這168個整數:
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 1
07 109 113 127 131 137 139 149 151 157 163
167 173 179 181 191 193 197 199 211 2
23 227 229 233 239 241 251 257 263 269 271
277 281 283 293 307 311 313 317 331 3
37 347 349 353 359 367 373 379 383 389 397
401 409 419 421 431 433 439 443 449 4
57 461 463 467 479 487 491 499 503 509 521
523 541 547 557 563 569 571 577 587 5
93 599 601 607 613 617 619 631 641 643 647
653 659 661 673 677 683 691 701 709 7
19 727 733 739 743 751 757 761 769 773 787
797 809 811 821 823 827 829 839 853 8
57 859 863 877 881 883 887 907 911 919 929
937 941 947 953 967 971 977 983 991 9
97
總共有20個既是迴文數又是質數的數:
2 3
5 7 11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929
請按任意鍵繼續. . .
Ⅱ 用c語言求10到9999之間即是素數,又是迴文數的數的個數
//#include"stdafx.h"//vc++6.0加上這一行.
#include"stdio.h"
intprime(intn){
inti;
if(n>2&&!(n&1)||n<2)return0;
for(i=3;i*i<=n;i+=2)
if(!(n%i))return0;
return1;
}
intmain(void){
intn,t,m,sum;
for(sum=0,n=11;n<10000;n+=2)
if(prime(n)){
for(t=0,m=n;m;(t*=10)+=m%10,m/=10);
if(n==t)sum++;
}
printf("Atotalof%d. ",sum);
return0;
}
Ⅲ c++編程輸入三位數中所有既是素數又是迴文數
#include<iostream>
using namespace std;
/*判斷是否為素數*/
bool judgess(const int& number){
for(int i=2;i<=number/2;i++)
if(number%i==0)
return false;
return true;
}
int main(int argc,char* argv[]){
for(int i=1;i<10;i+=2)
{
for(int j=0;j<10;j++)
{
int tmp=i*100+i+10*j;
if(judgess(tmp))
cout<<tmp<<endl;
}
}
return 0;
}
正好看見了,隨手寫的。沒仔細測試將就著用吧
Ⅳ c語言編程 求大於200的最小自然數,該數既是素數,又是迴文數
#include <iostream>
using std::cout;
using std::endl;
const unsigned int maxNum = 100000000;
const unsigned int priArrSize = 1000000;
unsigned int priArray[ priArrSize ];
unsigned int priCal = 0;
/** 初始化素數數組的前n位 **/
void initPriArray(unsigned int initSize);
/** 測試一個數是否為迴文數 **/
bool testPalin(unsigned int testNumber);
/** 得到十進制的逆序數 **/
unsigned int converse(unsigned int number);
/** 測試一個數是否為素數 **/
bool testPrime(unsigned int testNumber);
int main()
{
initPriArray(200);
for (int i = 200; i != maxNum + 1; ++i) {
if (testPrime(i)) {
if (testPalin(i)) {
cout << i << endl;
}
}
}
return 0;
}
void initPriArray(unsigned int iSize)
{
unsigned int lastPri = priArray[ priCal ];
if (lastPri >= iSize) {
return;
}
unsigned int testQuan = iSize - lastPri;
for (unsigned int i = lastPri + 1; i != iSize + 1; ++i) {
testPrime(i);
}
}
bool testPalin(unsigned int a)
{
if (a != converse(a))
return false;
else
return true;
}
unsigned int converse(unsigned int a)
{
unsigned int temp = a;
unsigned int conv = 0;
unsigned int i = 10;
while (a / i) {
i *= 10;
}
i /= 10;
do {
conv += (temp % 10) * i;
temp /= 10;
i /= 10;
} while (temp);
return conv;
}
bool testPrime(unsigned int a)
{
if (a < 2)
return false;
for (unsigned int i = 0; i != priCal; ++i) {
if (a % priArray[ i ] == 0) {
return false;
}
}
priArray[ priCal ] = a;
++priCal;
return true;
}
速度貌似還可以,可以求比較大的自然數范圍內的代碼
Ⅳ 用C語言:求10--1000中,所有既是迴文數又是素數的列印
int
i,j,m=0
for
(i=10;i<=1000;i++)
{for
(j=2;j<i-1;j++)
if
(i%j==0)
break;
if(i>=j+1)
a[m++]=i;
"將10-1000所有素數存於數組A中"
}
for
(i=0;i<=m;i++)
{判斷a[i]是否是迴文數,如果是則輸出
}
-------------------------------------------
*問題分析與演算法設計
所謂迴文素數是指,對一個整數n從左向右和從由向左讀其結果值相同且是素數,即稱n為迴文素數。所以本題的重點不是判斷素數的方法,而是求迴文整數。構造迴文數的方法很多,這里僅介紹一種最簡單的演算法。實現思路是先求出一個整數的迴文數,再判斷是否為素數。
不超過1000的迴文數包括二位和三位的迴文數,我們採用窮舉法來構造一個整數並求與其對應的反序數,若整數與其反序數相等,則該整數是迴文數。
*程序說明與注釋
#i
nclude<stdio.h>
int
a(int
n)
int
main()
{
int
i,j,t,k,s;
printf("Following
are
palindrome
primes
not
greater
than
1000:\n");
for(i=0;i<=9;++i)
//窮舉第一位
for(j=0;j<=9;++j)
//窮舉第二位
for(k=0;k<=9;++k)
//窮舉第三位
{
s=i*100
+
j*10
+
k;
//計算組成的整數
t=ik*100
+
j*10
+
i;
//計算對應的反序數
if(i
==
0
&&
j==0)
//處理整數的前兩位為0的情況
{
t/100;
}
else
if(i
==0)
//處理整數的第一位為0的情況
{
t/10;
}
if(s.10
&&
s==t
&&
a(s))
//若大於10且為迴文素數,則輸出
{
printf("%d\t",s);
}
}
return
0;
}
//判斷參數n是否為素數
int
a(int
n)
{
int
i;
for(i=2;i<(n-1)/2;+=i)
{
if(n%i
==
0)
return
0;
}
return
1;
}
*運行結果
Following
are
palindrome
primes
not
greater
than
1000:
11
101
131
151
181
191
313
353
373
383
727
787
797
919
929
Ⅵ C語言:從給出的數據中統計出既是迴文數又是素數的數
#include<stdio.h>
inthw(intn)
{inty=0,n1;
n1=n;
for(;n;n/=10)y=y*10+n%10;
returny==n1;
}
intprime(intn)
{inti;
for(i=2;i*i<=n;i++)
if(n%i==0)return0;
returnn>1;
}
intmain()
{intn,c='',num=0;
scanf("%d%c",&n,&c);
while(1)
{if(hw(n)&&prime(n))
num++;
if(c=='
')break;
scanf("%d%c",&n,&c);
}
printf("%d
",num);
return0;
}
Ⅶ 迴文素數C++
#include <stdio.h>
int isprime(long n)
{
long i;
if(n<2)
return 0;
for(i=2;i*i<=n;++i)
if(n%i==0)
return 0;
return 1;
}
int ispali(long n)
{
long t,m;
for(t=n,m=0;t;t/=10)
m=m*10+t%10;
return m==n;
}
int main()
{
long n,cnt;
for(cnt=0;scanf("%ld",&n)==1&&n>0;)
{
if(isprime(n))
cnt++;
}
printf("%ld ",cnt);
return 0;
}