/*
第一题:......
第二题:... ...
*/
#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因数之和%s
bool 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;
}
第一题:......
第二题:... ...
*/
#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因数之和%s
bool 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;
}
评论