c语言欧拉函数的计数 c语言计算对数函数
C语言算一个数欧拉函数,输入0结束
unsigned int ss(unsigned int a)
为市中等地区用户提供了全套网页设计制作服务,及市中网站建设行业解决方案。主营业务为做网站、网站建设、市中网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
{
unsigned int i;
for(i=2;i*i=a;i++) {
if(a%i==0) break;
}
if(i*i=a) return 0;
else return 1;
}
这个判断素数的函数逻辑是:
i在2~根号a(a是外部传入的需要判断的正整数)之间循环递增1,
如果a能被i整除,则跳出循环,否则继续循环直至i大于根号a退出循环,
退出循环后,判断当前i值是否小于根号a,
小于等于根号a,则是中途退出,返回0(是合数);
大于根号a,则是循环条件完成退出,返回1(是质数)。
函数ss( a)在函数unsigned int oula(unsigned int n)中调用
unsigned int oula(unsigned int n)
{
unsigned int f=n,p;
for(p=2;p=n;p++)
if(ss(p)(n%p==0)) f=f*(1-(1/p)); 调用处
return f;
}
输入100,000,000,要看编译器对unsigned int的定义,
如果编译器定义为2 byte,则范围是:0~2^16-1(62353),此时100,000,000会溢出。
如果编译器定义为4 byte,则范围是:0~4294967295,大于100,000,000.此时可以输入,但因数据太大,计算完成要超过2分钟(用去年主流配置的x86电脑测试),输入10,000,000就感觉明显的时延,要约20秒才能输出结果。
测试截图如下图:
另,函数unsigned int oula(unsigned int n)需要改成:
unsigned int oula(unsigned int n)
{
unsigned int f=n,p;
for(p=2;p=n;p++)
if(ss(p)(n%p==0))
//f=f*(1-(1/p)); //修改小数部分丢失问题
f=f*(p-1)/p;
return f;
}
供参考。
如何用C语言编写(函数的方法)1 十个数按大小排列2两个整数的最大公约数
排序:
#include "stdio.h"
main()
{
int a[10],i,j,t;
printf("Enter ten numbers:");
/*输入10个数*/
for(i=0;i10;i++)
{
scanf("%d",a[i]);
}
/*排序*/
for(i=0;i9;i++)
{
for(j=i+1;j10;j++)
{
if(a[i]a[j])
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
}
/*升序输出*/
for(i=0;i10;i++)
{
printf("%2d",a[i]);
}
}
最大公约数:
#include "stdio.h"
main()
{
int x,y,m,n=1,s,t=2,i;
printf("Enter two numbers:");
scanf("%d%d",x,y);
m=(xy?x:y);
s=x*y;
for(i=1;i=m;i++)
{
if( x%t==0 y%t==0)
{
x/=t;
y/=t;
n*=t;
}
else
{
t++;
}
}
printf("%d %d",n,s/n);
}
C语言实现欧拉函数
int eular(int n)
{
int ret=1,i; //定义变量
for(i=2;i*i=n;i++) //从i=2开始循环,判定条件为i*i小于等于n,循环一次i增加1
if(n%i==0) //判定条件为n除以i的余数等于0
{
n/=i,ret*=i-1; //n=n/i,ret = ret*(i-1)
while(n%i==0) //当n除以i的余数等于0时执行下面的语句,否则跳过
n/=i,ret*=i;
}
if(n1) //如果n1执行下面语句,否则跳过
ret*=n-1; //ret = ret*(n-1)
return ret;
}
直接复制的百度百科的,没具体看是什么功能
C语言中这么求欧拉函数的值有什么问题吗,题目如下。
#includestdio.h
int main() {
int sum,x,i,a;
while(scanf("%d", x)!=EOF) {
a=x;
sum=a-1;
while (x2){
x--;
for (i=2; i=x;i++) {
if (a%i == 0 x%i == 0) {
sum--;
break;
}
}
}
printf("%d\n", sum);
}
return 0;
}
没问题,结果是对的。
其中注意,1是和大于1的每个数互质的。你将sum置为a-1,然后i从2开始计算,刚好把1默认算进去了。因此结果是正确的。
分享名称:c语言欧拉函数的计数 c语言计算对数函数
分享路径:http://hbruida.cn/article/hgedec.html