#include stdio.h
创新互联公司致力于互联网品牌建设与网络营销,包括成都网站制作、成都网站设计、SEO优化、网络推广、整站优化营销策划推广、电子商务、移动互联网营销等。创新互联公司为不同类型的客户提供良好的互联网应用定制及解决方案,创新互联公司核心团队十多年专注互联网开发,积累了丰富的网站经验,为广大企业客户提供一站式企业网站建设服务,在网站建设行业内树立了良好口碑。
int eulerFunc(int n, int* num_out) {
int i, j, cnt = 0;
num_out[cnt++] = 1;
for (i = 2; i = n; ++i) {
for (j = 2; j = i; ++j) {
if (i % j == 0 n % j == 0) {
break;
}
}
if (j i) {
num_out[cnt++] = i;
}
}
return cnt;
}
int main(void) {
int n, num[10], y, i;
scanf("%d", n);
y = eulerFunc(n, num);
for (i = 0; i y; ++i) {
printf("%d ", num[i]);
}
printf("\n%d", y);
return 0;
}
#include iostream
#include cmath
#include iomanip
using namespace std;
int main()
{
int m;
int n;
int p = 2;
cout "请输入数值:" endl;
cin n;
m = n;
int k = 0;
/*
if (p*pnn1)
{cout m endl;
}*///放在后面写
while (p*p = n)
//不能写成 p*p = n,k=0,这样写是逗号表达式,表达式的值取最后一个表达式的值k=0,表达式恒假,导致循环一次也不做
{
k = 0
while (p / n != 0)//除号两边写反了,循环的条件是p/n不为0
{
n /= p; k++;
}
if (k = 1)
{
m = m*(p - 1) / p;
}
p++;
}
if (n1)
{
m = m*(n - 1) / n;
/*
cout m endl;*///放在后面写
}
//return m;
//图上是用函数做的,所以有返回,这里你直接写在主程序中,所以不要加return m
cout m endl;//输出m的值
return 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;
}
供参考。
#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默认算进去了。因此结果是正确的。