问题
一个合数,去掉最低位,剩下的数仍是合数,再去掉剩下的数的最低位,余留下来的数还是合数,这样反复,一直到最后剩下的一位数仍是合数;我们把这样的数称为纯粹合数。求所有的三位纯粹合数。
1.分析问题
- 已知:所有的三位数
- 未知:符合条件的纯粹合数
- 关系:合数是指在大于1的整数中除了1和它本身以外还有其他因数的数。
2.定义变量
无。
3.输入数据
无。
4.数据计算
- 首先定义一个名为isComposite的函数,其作用是判断输入的整数是否为合数。根据合数的定义,一个大于1的整数如果除了1和它本身以外还有其他因数,则该数为合数。此函数通过遍历从2到该数平方根的所有整数,检查是否存在可以整除该数的因子。若找到这样的因子,则返回true表示该数为合数;否则,在遍历完成后返回false。
// 定义一个函数,判断传入的整数num是否为合数
bool isComposite(int num){if(num<1) return false;// 遍历从2到num的平方根,查找是否存在能整除num的因子for(int i=2;i*i<=num;++i){// 如果找到了一个因子可以整除num,说明num是合数,返回trueif(num%i==0)return true;}// 如果遍历结束后都没有找到因子,则num不是合数,返回falsereturn false;
}
- 定义另一个名为isPure的函数,用于判断一个整数是否为“纯粹合数”,即它的每一位数字都是合数。此函数通过循环不断去除整数的个位数,并对每一位进行isComposite函数的调用,判断是否为合数。只要有一位不是合数,立即返回false;当所有位都经过检查且均为合数时,返回true。
// 定义一个函数,用于判断传入的整数num是否为纯粹合数(即其每一位数字都是合数)
bool isPure(int num){// 当num大于0时,持续进行循环判断while(num){// 获取num的个位数并检查它是否为合数,如果不是,则该数不是纯粹合数,返回falseif(!isComposite(num)) return false;// 将num除以10,去掉个位数,继续检查下一位数字num/=10;}// 所有位上的数字都满足合数条件,所以num是纯粹合数,返回truereturn true;
}
- 在主函数main中,实现数据计算过程。首先设定一个循环遍历所有的三位数(从100到999)。对于每个遍历到的三位数,调用isPure函数进行判断,如果这个数是纯粹合数,则将其输出。
//四、数据计算 ,遍历所有三位数for(int i=100;i<1000;i++){// 使用isPure()函数检测当前三位数是否为纯粹合数if(isPure(i)) cout<<i<<endl;// 若满足条件,输出该纯粹合数}
5.输出结果
最后,程序执行完毕,返回0,表示程序正常结束。通过这种方式,程序将成功找出并输出所有三位纯粹合数。
完整代码如下:
#include<bits/stdc++.h>
using namespace std;// 定义一个函数,判断传入的整数num是否为合数
bool isComposite(int num){if(num<1) return false;// 遍历从2到num的平方根,查找是否存在能整除num的因子for(int i=2;i*i<=num;++i){// 如果找到了一个因子可以整除num,说明num是合数,返回trueif(num%i==0)return true;}// 如果遍历结束后都没有找到因子,则num不是合数,返回falsereturn false;
}// 定义一个函数,用于判断传入的整数num是否为纯粹合数(即其每一位数字都是合数)
bool isPure(int num){// 当num大于0时,持续进行循环判断while(num){// 获取num的个位数并检查它是否为合数,如果不是,则该数不是纯粹合数,返回falseif(!isComposite(num)) return false;// 将num除以10,去掉个位数,继续检查下一位数字num/=10;}// 所有位上的数字都满足合数条件,所以num是纯粹合数,返回truereturn true;
}int main(){//一、分析问题//已知:所有的三位数 //未知:纯粹合数 //关系:合数是指在大于1的整数中除了1和它本身以外还有其他因数的数。//二、数据定义 //三、数据输入 //四、数据计算 ,遍历所有三位数for(int i=100;i<1000;i++){// 使用isPure()函数检测当前三位数是否为纯粹合数if(isPure(i)) cout<<i<<endl;// 若满足条件,输出该纯粹合数}//五、输出结果 return 0;
}