/* 第一题:...... 第二题:... ...*/#include <iostream.h>//#include <math.h>//#include <stdlib.h>//使用到exit()函数#include <conio.h>//使用到获取键盘字符函数const int MAX_M = 300;//指数建议不要超过 MAX_M,不然计算结果将无法预料int* getFactor(const int num);//取得因数表int SumFactorMod(int n, int s);//取得余数int SumFactorMod(int n, int m, int s);//取得n^m因数之和%sbool test1();bool test2();int main(){ const char* text1=" 第一题: 输入2个数字n,s。求数字n的所有因数之和除以s的余数.比如输入6 5 6的因数有1,2,3,6,因数之和为12,因为12除以5的余数为2 于是输出2。假设n,m都不超过5000000 \0"; const char* text2=" 第二题: 输入3个数字n, m, s。求数字n的m次方的所有因数之和除以m的余数。比如输入6 2 5 6^2=36 36的因数有1,2,3,4,6,9,12,18,36,因数之和为91 91除以5的余数为1,所以输出1。\0"; cout<<text1<<endl; cout<<text2<<endl; cout<<"\n\t\t输入1选择题1进入测试 输入2选择题2进入测试"<<endl; char key=_getch(); while(true) { switch(key) { case '1':test1();break; case '2':test2();break; case 0x1b:exit(0); default:break; } cout<<"请继续选择题目"<<endl; key=_getch(); } return false;}int* getFactor(const int num){ int *temp=new int[num]; cout<<"数字n的所有因数如下"<<endl; int j=0; for(int i=1,k=0;i<=num;i++) { if(0==num%i) { cout<<i<<" "; temp[k++]=i; if(i==num) { for(j=k;j<num;j++)temp[j]=0; return temp; } } } cout<<endl; return temp;}int SumFactorMod(int n, int s){ int *factor=new int[n]; for(int i=0;i<n;i++)factor[i]=0; factor=getFactor(n); unsigned int sum=0; i=0; while(i<n&&factor[i]!=0) { sum+=factor[i]; i++; } cout<<"因数之和为"<<sum<<endl; return sum%s;}int SumFactorMod(int n, int m, int s){ unsigned int powN_M=(unsigned int)pow(n,m); unsigned int sum=SumFactorMod(powN_M,s); return sum%s;}bool test1(){ cout<<"分别输入两个数n,s:"<<endl; int n=0,s=0; do{ cin>>n; cin>>s; if(n<=0||s<=0)cout<<"n和s不能小于等于0,请重新输入"<<endl; if(n>5000000) { cout<<"n不能超过5000000,请重新输入"<<endl; } if(s>5000000) { cout<<"s不能超过5000000,请重新输入"<<endl; } }while(n>5000000 || s>5000000 || n<=0 || s<=0); cout<<"数字n的所有因数之和除以s的余数为"<<SumFactorMod( n , s )<<endl; return true;}bool test2(){ cout<<"分别输入三个数n,m,s:"<<endl; int n=0,m=0,s=0; do{ cin>>n; cin>>m; cin>>s; if(n<=0||s<=0)cout<<"n和s不能小于等于0,请重新输入"<<endl; if(n>5000000) { cout<<"n不能超过5000000,请重新输入"<<endl; } if(m>MAX_M) { cout<<"m建议不要超过"<<MAX_M<<",否则计算结果将无法预料请重新输入"<<endl; } if(s>5000000) { cout<<"s不能超过5000000,请重新输入"<<endl; } }while(n>5000000 || s>5000000 || n<=0 || s<=0); cout<<"数字"<<n<<"的"<<m<<"次方的所有因数之和除以"<<m<<"的余数"<<SumFactorMod(n,m,s)<<endl; return true;}

评论