P153
#include
#include
using namespace std;
bool cmp(int a, int b){
return a > b;
}
void to_array(int n, int num[]){
for(int i = 0; i < 4; i++){
num[i] = n % 10;
n /= 10;
}
}
int to_number(int num[]){
int sum = 0;
for(int i = 0; i < 4; i++){
sum = sum * 10 + num[i];
}
return sum;
}
int main(){
int n, MIN, MAX;
scanf("%d",&n);
int num[5];
while(1){
to_array(n, num);
sort(num, num + 4);
MIN = to_number(num);
sort(num, num + 4, cmp);
MAX = to_number(num);
n = MAX - MIN;
printf("%04d - %04d = %04d\n", MAX, MIN, n);
if(n == 0 || n == 6174){
break;
}
}
return 0;
}
P155~156
#include
int gcd(int a,int b){
if(b==0){
return a;
}else{
return gcd(b,a%b);
}
}
int main(){
int m,n;
while(scanf("%d%d",&m,&n)!=EOF){
printf("%d\n",gcd(m,n));
}
return 0;
}
P157~159
#include
#include
const int maxn=100010;
bool isprime(int n){
if(n<=1){
return false;
}
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0){
return false;
}
}
return true;
}
int prime[maxn],pnum=0;
void find_prime(){
for(int i=1;i<maxn;i++){
if(isprime(i)){
prime[pnum++]=i;
}
}
}
struct factor{
int x,cnt;
}fac[10];
int main(){
find_prime();
int n,num=0;
scanf("%d",&n);
if(n==1){
printf("1=1");
}else{
printf("%d=",n);
int sqr=(int)sqrt(1.0*n);
for(int i=0;i<pnum&&prime[i]<=sqr;i++){
if(n%prime[i]==0){
fac[num].x=prime[i];
fac[num].cnt=0;
while(n%prime[i]==0){
fac[num].cnt++;
n/=prime[i];
}
num++;
}
if(n==1){
break;
}
}
if(n!=1){
fac[num].x=n;
fac[num++].cnt=1;
}
for(int i=0;i<num;i++){
if(i>0){
printf("*");
}
printf("%d",fac[i].x);
if(fac[i].cnt>1){
printf("^%d",fac[i].cnt);
}
}
}
return 0;
}
P161
#include
#include
bool isprime(int n){
if(n<=1){
return false;
}
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0){
return false;
}
}
return true;
}
int prime[101],pnum=0;
bool p[101]={0};
void find_prime(){
for(int i=1;i<101;i++){
if(isprime(i)){
prime[pnum++]=i;
p[i]=true;
}
}
}
int main(){
find_prime();
for(int i=1;i<pnum;i++){
printf("%d ",prime[i]);
}
return 0;
}
P163
#include
#include
int prime[101],pnum=0;//primr数组存放所以素数,pNum为素数个数
bool p[101]={0};//如果i为素数 则p[i] == false
void find_prime(){
for(int i=2;i<101;i++){
if(p[i]==false){
prime[pnum++]=i;
for(int j=i+i;j<101;j+=i){
p[j]=true;
}
}
}
}
int main(){
find_prime();
for(int i=1;i<pnum;i++){
printf("%d ",prime[i]);
}
return 0;
}
P164
#include
#include
const int maxn=1000001;
int prime[maxn],pnum=0;
bool p[maxn]={0};
void find_prime(int n){
for(int i=2;i<maxn;i++){
if(p[i]==false){
prime[pnum++]=i;
if(pnum>=n){
break;
}
for(int j=i+i;j<maxn;j+=i){
p[j]=true;
}
}
}
}
int main(){
int m,n,count=0;
scanf("%d%d",&m,&n);
find_prime(n);
for(int i=m;i<=n;i++){
printf("%d",prime[i-1]);
count++;
if(count%10!=0&&i<n){
printf(" ");
}else{
printf("\n");
}
}
return 0;
}
P168~169
#include
#include
const int maxn=100010;
bool isprime(int n){
if(n<=1){
return false;
}
int sqr=(int)sqrt(1.0*n);
for(int i=2;i<=sqr;i++){
if(n%i==0){
return false;
}
}
return true;
}
int prime[maxn],pnum=0;
void find_prime(){
for(int i=1;i<maxn;i++){
if(isprime(i)){
prime[pnum++]=i;
}
}
}
struct factor{
int x,cnt;
}fac[10];
int main(){
find_prime();
int n,num=0;
scanf("%d",&n);
if(n==1){
printf("1=1");
}else{
printf("%d=",n);
int sqr=(int)sqrt(1.0*n);
for(int i=0;i<pnum&&prime[i]<=sqr;i++){
if(n%prime[i]==0){
fac[num].x=prime[i];
fac[num].cnt=0;
while(n%prime[i]==0){
fac[num].cnt++;
n/=prime[i];
}
num++;
}
if(n==1){
break;
}
}
if(n!=1){
fac[num].x=n;
fac[num++].cnt=1;
}
for(int i=0;i<num;i++){
if(i>0){
printf("*");
}
printf("%d",fac[i].x);
if(fac[i].cnt>1){
printf("^%d",fac[i].cnt);
}
}
}
return 0;
}
P170~176
#include
//法一:递归式
int res1[1010][1010]={0};
int c1(int n,int m,int p){
if(m==0||m==n){
return 1;
}
if(res1[n][m]!=0){
return res1[n][m];
}else{
return res1[n][m]=(c1(n-1,m,p)+c1(n-1,m-1,p))%p;
}
}
//法一:递推式
int res2[1010][1010]={0};
const int t=10;//t相当于n
void c2(){
for(int i=0;i<=t;i++){
res2[i][0]=res2[i][i]=1;
}
for(int i=2;i<=t;i++){
for(int j=0;j<=i/2;j++){
res2[i][j]=(res2[i-1][j]+res2[i-1][j-1])%100;//此处的10相当于p
res2[i][i-j]=res2[i][j];
}
}
}
//法二:定义式计算
int main(){
printf("%d",res2[5][2]);
return 0;
}
P181~183
#include
//法一:递归式
int res1[1010][1010]={0};
int c1(int n,int m,int p){
if(m==0||m==n){
return 1;
}
if(res1[n][m]!=0){
return res1[n][m];
}else{
return res1[n][m]=(c1(n-1,m,p)+c1(n-1,m-1,p))%p;
}
}
//法一:递推式
int res2[1010][1010]={0};
const int t=10;//t相当于n
void c2(){
for(int i=0;i<=t;i++){
res2[i][0]=res2[i][i]=1;
}
for(int i=2;i<=t;i++){
for(int j=0;j<=i/2;j++){
res2[i][j]=(res2[i-1][j]+res2[i-1][j-1])%100;//此处的10相当于p
res2[i][i-j]=res2[i][j];
}
}
}
//法二:定义式计算
int main(){
printf("%d",res2[5][2]);
return 0;
}
P183~185
#include
long long c1(long long n,long long m){//直接利用公式计算
long long ans=1;
for(long long i=1;i<=n;i++){
ans*=i;
}
for(long long i=1;i<=m;i++){
ans/=i;
}
for(long long i=1;i<=n-m;i++){
ans/=i;
}
return ans;
}
//c(n,m)=c(n-1,m)+c(n-1,m-1)
long long c2(long long n,long long m){//利用递归
if(m==0||m==n){
return 1;
}else{
return c2(n-1,m)+c2(n-1,m-1);
}
}
long long res3[67][67]={0};
long long c3(long long n,long long m){//记录算过的C(n,m) 递归
if(m==0||m==n){
return 1;
}
if(res3[n][m]!=0){
return res3[n][m];
}else{
return res3[n][m]=c3(n-1,m)+c3(n-1,m-1);
}
}
int res4[67][67]={0};
const int t=60;
void c4(){//打表递推
for(int i=0;i<=t;i++){
res4[i][0]=res4[i][i]=1;
}
for(int i=2;i<=t;i++){
for(int j=0;j<=i/2;j++){
res4[i][j]=res4[i-1][j]+res4[i-1][j-1];
res4[i][i-j]=res4[i][j];
}
}
}
long long c5(long long n,long long m){//定义式变形
long long ans=1;
for(long long i=1;i<=m;i++){
ans=ans*(n-m+i)/i;
}
return ans;
}
int main(){
printf("%d",c5(5,2));
return 0;
}
P186
#include
//法一:递归式
int res1[1010][1010]={0};
int c1(int n,int m,int p){
if(m==0||m==n){
return 1;
}
if(res1[n][m]!=0){
return res1[n][m];
}else{
return res1[n][m]=(c1(n-1,m,p)+c1(n-1,m-1,p))%p;
}
}
//法一:递推式
int res2[1010][1010]={0};
const int t=10;//t相当于n
void c2(){
for(int i=0;i<=t;i++){
res2[i][0]=res2[i][i]=1;
}
for(int i=2;i<=t;i++){
for(int j=0;j<=i/2;j++){
res2[i][j]=(res2[i-1][j]+res2[i-1][j-1])%100;//此处的10相当于p
res2[i][i-j]=res2[i][j];
}
}
}
//法二:定义式计算
int main(){
printf("%d",res2[5][2]);
return 0;
}