c语言编程例题
发布网友
发布时间:2022-04-19 23:38
我来回答
共4个回答
热心网友
时间:2023-09-08 00:09
#include <iostream>
#include <math.h>
using namespace std;
// 判断一个数是否为素数
bool IsPrimeNumber(int iNum)
{
bool bRtn = true;
if (iNum <= 1)
{
return false;
}
int iTmp = sqrt((double)iNum);
for (int i=2;i<=iTmp;++i)
{
if((iNum % i) == 0)
{
bRtn = false;
break;
}
}
return bRtn;
}
// 判断一个数是否为偶数
// true,偶数;false,奇数
bool IsEvenNumber(int iNum)
{
return ((iNum%2) == 0) ? true : false;
}
// 查找小于1000的回文素数
void FindPalindromePrimes(int iNum)
{
bool bRst = false;
int i = 2;
int iHundDigit = 0,iTenDigit = 0,iSingleDigit = 0;
for (i;i<1000;++i)
{
if (IsPrimeNumber(i))
{
if (i < 10)
{
bRst = true;
cout << i << " "; // 输出回文素数.
}
else if ((i >= 10) && (i < 100))
{
iTenDigit = i/10;
iSingleDigit = i%10;
// 如果个位上的数与10位上的数相等
if (iTenDigit == iSingleDigit)
{
bRst = true;
cout << i << " ";
}
}
else
{
int iTmp = i;
iHundDigit = iTmp/100;
iTmp = iTmp%100;
iTenDigit = iTmp/10;
iSingleDigit = iTmp%10;
if ((iHundDigit == iTenDigit) && (iTenDigit == iSingleDigit))
{
bRst = true;
cout << i << " ";
}
}
}
}
if (!bRst)
{
cout << "没有小于1000的回文素数!" << endl;
}
}
// 查找小于100的绝对素数
void FindAbsolutePrime(int iNum)
{
bool bRst = false;
int i = 2,iTmp = 0;
int iTenDigit = 0,iSingleDigit = 0;
for (i; i < 100;++i)
{
if (IsPrimeNumber(i))
{
iTenDigit = i/10;
iSingleDigit = i%10;
iTmp = iSingleDigit*10+iTenDigit;
if (IsPrimeNumber(iTmp))
{
bRst = true;
cout << i << " ";
}
}
}
if (!bRst)
{
cout << "没有小于100的绝对素数!" << endl;
}
}
// 分解10~20之间的偶数
void ResolveEventNum(int iNum)
{
bool bRst = false;
int i = 2,iTmp = 0;
for (;i<iNum;++i)
{
if (IsPrimeNumber(i))
{
iTmp = iNum - i;
if (IsPrimeNumber(iTmp))
{
bRst = true;
cout << iNum << "分解为" << i << " + " << iTmp << endl;
break;
}
}
else
continue;
}
if (!bRst)
{
cout << "不能分解为两个素数之和!" << endl;
}
}
int main(void)
{
int iInput = 0;
cout << "请输入一个大于1的整数:";
cin >> iInput;
if (IsEvenNumber(iInput))
{
cout << iInput << " 是一个偶数" << endl;
if ((iInput >= 10) && (iInput <= 20))
{
ResolveEventNum(iInput);
}
}
else
{
cout << iInput << " 是一个奇数" << endl;
cout << "查找小于1000的回文数:" << endl;
FindPalindromePrimes(iInput);
cout << endl;
cout << "查找小于100的绝对素数:" << endl;
FindAbsolutePrime(iInput);
cout << endl;
}
getchar();
return 0;
}
附上运行结果(如果满意,麻烦设为最佳答案,做任务需要,谢谢!):
热心网友
时间:2023-09-08 00:10
#include<stdio.h>
#include<math.h>
//检测是否素数
int isSs(int n)
{
int i;
if(n == 2)
{
return 1;
}
for(i = 2; i <= sqrt(n); i++)
{
if(n % i == 0)
{
return 0; //只要能被2到√n中任何一个数整除,就说明不是素数
}
}
return 1;
}
//检测是否为回文
int isHw(int n)
{
if(n < 10) //个位数的素数一定是回文
{
return 1;
}
else if(n >= 10 && n < 100) //两位数
{
int sws = n/10; //十位数
int gws = n%10; //个位数
if(sws == gws)
{
return 1;
}
}
else if(n >= 100 && n < 1000)
{
int bws = n/100; //百位数
int gws = n%100%10; //个位数
if(bws == gws)
{
return 1;
}else
{
return 0;
}
}
}
//检测是否是回文素数
int isHwss(int n)
{
if(isSs(n) && isHw(n))
{
return 1;
}else
{
return 0;
}
}
//检测是否是绝对素数
int isJdss(int n)
{
if(n < 10) //个位数的素数一定是绝对素数
{
return 1;
}
else if(n >= 10 && n < 100) //两位数
{
int sws = n/10; //十位数
int gws = n%10; //个位数
int new_n = gws*10 + sws; //位置对调后的新数
if(isSs(n) && isSs(new_n))
{
return 1;
}else
{
return 0;
}
}
}
//输出1-1000的回文素数
void printHw()
{
int i;
printf("1-1000的回文素数:\n");
for(i = 2; i <= 1000; i++)
{
if(isHwss(i))
{
printf("%d ", i);
if(i%10==0)
{
printf("\n");
}
}
}
printf("\n");
}
//输出1-100的绝对素数
void printJd()
{
int i;
printf("1-100的绝对素数:\n");
for(i = 2; i < 100; i++)
{
if(isJdss(i))
{
printf("%d ", i);
if(i%10==0)
{
printf("\n");
}
}
}
printf("\n");
}
//分解偶数为两个素数之和
void divide(int n)
{
int i;
for(i = 2; i <= n/2; i++)
{
if(isSs(i) && isSs(n-i))
{
printf("%d = %d + %d\n", n, i, n-i);
break;
}
}
}
int main()
{
int n;
printf("请输入一个数:");
scanf("%d", &n);
if(n % 2) //奇数
{
printHw();
printJd();
}else if(n >= 10 && n <= 20 && n % 2 == 0)
{
divide(n);
}
}
热心网友
时间:2023-09-08 00:10
能想到的最简单程序
供参考
#include <stdio.h>
static unsigned char map[1000];
static void init()
{
int i, j;
for(i = 2; i < 1000; i ++)
{
if(map[i]) continue;
for(j = i*2; j < 1000; j += i)
map[j] = 1;
}
}
static int reverse( int num )
{
int temp, target;
temp = num;
target = 0;
while( temp )
{
target = target*10 + temp % 10;
temp /= 10;
}
return target;
}
int main()
{
int i;
int r;
int aa[100];
int index = 0;
init();
scanf("%d", &i);
if(i%2)
{
printf("<1000 回文素数:\n");
for(i = 2; i < 1000; i ++)
{
if(map[i]) continue;
r = reverse(i);
if(!map[r])
{
printf("%d ", i);
if(i < 100) aa[index ++] = i;
}
}
printf("\n<100绝对素数:\n");
for(i = 0; i < index; i ++)
printf("%d ", aa[i]);
printf("\n");
}
else if(i > 9 && i < 21)
{
printf("%d = \n", i);
for(r = 3; r <= i/2; r += 2)
{
if(map[r]) continue;
if(map[i - r])continue;
printf("%d + %d\n", r, i - r);
}
}
return 0;
}
热心网友
时间:2023-09-08 00:11
// Prime_Number.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include "stdlib.h"
#include "math.h"
int Palindrome_Prime_Number(int Num)
{
if(Num%2==0)return 0;
for(int i=3;i<Num;i+=2)
{
if(Num%i==0)return 0;
}
return Num;
}
int _tmain(int argc, _TCHAR* argv[])
{
int Input,a,b,Num,Number;
printf("请输入一个数:");
scanf("%d",&Input);
if(Input%2==0){
printf("可分为素数:\n");
for(a=1;a<=9;a+=2)
{
for(b=0;b<2;b++)
{
Num=b*10+a;
Number=Input-Num;
Num=Palindrome_Prime_Number(Num);
Number=Palindrome_Prime_Number(Number);
if(Num>0 && Number>0)printf("%d,%d\n",Num,Number);
}
}
}else{
printf("回文素数:\n");
printf("11\n");
for(a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
Num=b*10+a*101;
Num=Palindrome_Prime_Number(Num);
if(Num>0)printf("%d\n",Num);
}
}
printf("\n");
printf("绝对素数\n");
for(a=1;a<=9;a+=2)
{
for(b=0;b<=9;b++)
{
Num=b*10+a;
Num=Palindrome_Prime_Number(Num);
if(Num>0){
Num=b+10*a;
Num=Palindrome_Prime_Number(Num);
if(Num>0)printf("%d\n",Num);
}
}
}
}
return 0;
}