
public class Test
{
static boolean is_odd(int n)//是否为素数
{
if(n==2||n==3) return true
if(n%2==0) return false//素数肯定不是偶数
int i
for(i=3i<=n/2i+=2)//素数从奇数中挑选
if(n%i==0) return false
return true
}
public static void main(String[] args)
{
Scanner in=new Scanner(System.in)
System.out.println("输入数值")
int n=in.nextInt()
int i
System.out.print(n+"=")
for(i=2i<=ni++)
{
if(!is_odd(i)) continue//如果i不是素数,则i++,进行下一次循环
if(n%i==0)
{
while(true)//如果n%i一直 ==0则一直分解,否则跳出,i++
{
System.out.print(i)
n/=i
if(n!=1) System.out.print("*")
if(n%i!=0) break
}
}
}
System.out.println()
}
}
先求出120以下所有素数。把这些数放入一个set,一个数组
然后开始写个两层循环。
第一层 100到120,step2.
第二层 是素数数组。(优化的话可以最大到第一层的一半)
用第一层间数减第二层。然后在set里确定结果是不是也是素数。
这样就好了。
#include"stdio.h"
#include"math.h"
int prime(int n)
{int i
for(i=2i<=sqrt(n)i++)
if(n%i==0)return 0
return 1
}
int main()
{int i,j,k
scanf("%d",&i)
{for(j=3j<=i/2j+=2)
if(prime(j)&&prime(i-j))
{printf("%3d=%3d+%-7d",i,j,i-j)
if(++k%5==0)printf("\n")
}
}
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)