1.使用函数求特殊a串数列和
给定两个均不超过9的正整数a和n,要求编写函数求a+aa+aaa++⋯+aa⋯a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa⋯a(n个a)。
#include <stdio.h>
#include <math.h>
int fn(int a, int n)
{
int i, result;
result = a;
for(i=1;i<n;i++)
{
result = a + result*10;
}
return result;
}
int main()
{
int a, n, i;
int sum = 0;
scanf("%d %d", &a, &n);
for(i=1;i<=n;i++)
{
sum += fn(a,i);
}
printf("fn(%d, %d) = %d\n", a, n, fn(a,n));
printf("s = %d", sum);
}
2.欧拉函数
在数论中,欧拉函数f(n)被定义为:小于等于n的正整数中和n互质的数的数目(互质即两者最大公约数为1)
如f(1)=1,因为与小于等于1的数中与1互质的数只有1
再如f(8)=4,因为小于等于8中的数与8互质的数有1,3,5,7,而2与8最大公约数为2,4与8最大公约数为4,6与8最大公约数为2
现在给定一个数n,求f(n)的值
要求定义并调用函数f(n),返回欧拉函数的值
#include <stdio.h>
#include <math.h>
int gcd(int m,int n)
{
int i,l;
if(m>n)
{
l = m;
m = n;
n = l;
}
for(i=m;i>=1;i--)
{
if(m%i==0 && n%i==0)
break;
}
return i;
}
int fn(int n)
{
int result, i;
if(n==1)
{
result = 1;
}
else
{
result = 0;
for(i=1;i<n;i++)
{
if(gcd(n,i)==1 || i==1)
{
result++;
}
}
}
return result;
}
int main()
{
int t, i, n;
scanf("%d", &t);
for(i=1;i<=t;i++)
{
scanf("%d", &n);
printf("%d\n", fn(n));
}
}
3.使用函数验证哥德巴赫猜想
本题要求实现一个判断素数的简单函数,并利用该函数验证哥德巴赫猜想:任何一个不小于6的偶数均可表示为两个奇素数之和。素数就是只能被1和自身整除的正整数。
输入两个正整数m和n(0<=m<=n<=100),将m和n之间的偶数表示成两个素数之和,输出时每行显示5组。要求定义并调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0
#include <stdio.h>
#include <math.h>
int prime(int m)
{
int limit, i;
if(m<=1)
return 0;
else if(m==2)
return 1;
else
{
limit = sqrt(m) + 1;
for(i=2;i<=limit;i++)
{
if(m%i==0)
{
break;
}
}
if(i>limit)
return 1;
else
return 0;
}
}
int double_prime(int p)
{
int j;
if(p%2==0)
{
for(j=3;j<=p/2;j++)
{
if(prime(j)==1 && prime(p-j)==1)
{
printf("%d=%d+%d", p, j, p-j);
break;
}
}
}
}
int main()
{
int m, n, k, count;
scanf("%d %d", &m, &n);
count = 0;
for(k=m;k<=n;k++)
{
double_prime(k);
if(k%2==0 && k>=6)
{
count++;
if(count%5==0)
printf("\n");
else
printf(", ");
}
}
}
4.使用函数输出指定范围内的完数
本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。
要求定义并调用函数factorsum(number),它的功能是返回 number的因子和;定义和调用函数print_pn(m,n)逐行输出给定范围[m,n]内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。如果给定区间内没有完数,则输出一行“No perfect number”。
#include <stdio.h>
int factorsum(int number)
{
int i, sum = 0, flag = 0;
for(i=1;i<=number/2;i++)
{
if( number % i == 0 )
{
flag = 1;
sum += i;
if(i==number/2)
{
flag = 0;
}
}
if( number==sum && flag==0 )
{
return number;
}
}
}
int print_fn(int m, int n)
{
int j, k, flag = 1;
for(j=m;j<=n;j++)
{
if(j == factorsum(j))
{
flag = 0;
printf("%d = ", j);
for(k=1;k<=j/2;k++)
{
if(j%k==0 && k!=j/2)
{
printf("%d + ", k);
}
else if(k==j/2)
{
printf("%d\n", k);
}
}
}
}
if(flag == 1)
{
printf("No perfect number");
}
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
print_fn(m, n);
}