
[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
程序代码:#include <stdio.h>
int isprime(char* s,int sp,int len)
{//取出串s指定开始位置sp处长度为len的数字转换为整数并判断是否为素数
int i,j;
for(i=0,j=0;i<len;i++)j=j*10+s[i+sp]-'0';
for(i=2;i*i<=j&&j%i;i++);
return j>1&&i*i>j;
}
int fun(char *s,int start)
{
int i,j,k;
if(!s[start])return 1;
for(i=6;i;i--) //倒着分割可以尽量使分割的次数减少,每次都获取一个最大的素数
{
j=0;
if(isprime(s,start,i))j=fun(s,start+i);
if(j)
{
for(k=0;k<i;k++)printf("%c",s[start+k]);
printf(",");
return 1;
}
}
if(!start)printf("无法进行全部的素数分割!");
return 0;
}
void main()
{
char s[]="1447160917891993";
//char s[]="1111111111111111111111131";
//char s[]="14471609178919938";
fun(s,0);
printf("\n");
}